【发布时间】: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:,它仍然不会捕获此错误。 (我知道最终我想重新启动流,可能会增加退避延迟,但现在我只是想看看我是否可以简单地捕获错误。)
什么是捕捉这个并保持我的流继续进行的正确方法?显然,这是一个应该永远运行的机器人,所以我不想继续查看它以确保如果出现网络故障它仍然可以运行。
【问题讨论】: