[英]Python: Exception not getting caught in Tweepy for WantReadError
我正在使用Tweepy捕获Twitter流API。 与这个问题一样 ,当连接出现问题时 ,我偶尔会出现一系列错误,从
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:
,它仍然不会捕获此错误。 (我知道最终我想重新启动流,可能会增加退避延迟,但是现在我只是想看看是否可以简单地捕获错误。)
什么是正确的方法来捕捉并保持我的视频流? 显然,这是一个应该永远运行的机器人,因此,我不想不必继续研究它,以确保它在出现网络故障时仍能正常运行。
您看到的错误是在OpenSSL库中定义的,因此您无法正常调用它。 解决此问题所需要做的就是
import OpenSSL
并且应该在程序中开始识别该错误。
您应该已经安装了这个库pip(正在使用的一个库已经取决于它了!),但是如果万一它不是出于某种原因,则可以使用:
pip install pyopenssl
希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.