【问题标题】:Python: Exception not getting caught in Tweepy for WantReadErrorPython:WantReadError 的 Tweepy 中未捕获异常
【发布时间】:2019-05-12 05:27:20
【问题描述】:

我正在使用 Tweepy 来捕获 Twitter 流 API。和this question一样,当连接出现问题时,我偶尔会收到一系列错误,以

开头
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/urllib3/contrib/pyopenssl.py", line 256, in recv_into
return self.connection.recv_into(*args, **kwargs)
File "/usr/lib/python3/dist-packages/OpenSSL/SSL.py", line 1335, in recv_into
self._raise_ssl_error(self._ssl, result)
File "/usr/lib/python3/dist-packages/OpenSSL/SSL.py", line 1149, in _raise_ssl_error
raise WantReadError()
OpenSSL.SSL.WantReadError

随后出现其他几个“在处理上述异常期间,发生了另一个异常:”错误。

正如上一个问题所暗示的那样,Tweepy 的on_error 和类似方法不会捕获这些错误。但是,我不清楚如何编写包装器来尝试捕捉这一点。我最初是用

开始我的直播的
twitterStream = tweepy.Stream(auth=auth, listener=myListener)

myListener 是我的常规课程。我试着用

包装这个
try:
    twitterStream = tweepy.Stream(auth=auth, listener=myListener)
except OpenSSL.SSL.WantReadError as e:
    logger.error('WantReadError: %s', e)

但我在 IDE 中收到“未定义名称”错误,因为 OpenSSL 不是我直接在我的代码中拥有的东西,我不知道如何调用它。但即使我将其更改为except Exception as e:,它仍然不会捕获此错误。 (我知道最终我想重新启动流,可能会增加退避延迟,但现在我只是想看看我是否可以简单地捕获错误。)

什么是捕捉这个并保持我的流继续进行的正确方法?显然,这是一个应该永远运行的机器人,所以我不想继续查看它以确保如果出现网络故障它仍然可以运行。

【问题讨论】:

    标签: python openssl tweepy


    【解决方案1】:

    您看到的错误是在 OpenSSL 库中定义的,因此您无法正常调用它。你应该用它来解决这个问题是

    import OpenSSL
    

    并且应该开始在您的程序中识别错误。

    您应该已经安装了这个库 pip(您正在使用的库之一已经依赖于它!)但万一不是出于某种原因,您可以使用:

    pip install pyopenssl
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-28
      • 2012-05-31
      • 1970-01-01
      相关资源
      最近更新 更多