Python: исключение не попадает в Tweepy для WantReadError - PullRequest
1 голос
/ 09 мая 2019

Я использую Tweepy для захвата потокового API Twitter.Как и в случае этого вопроса , я иногда получаю серию ошибок при возникновении проблемы с соединением, начиная с

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

, за которой следует несколько других "Во время обработки вышеуказанного исключения,произошло другое исключение: «ошибки.

». Как подразумевалось в предыдущем вопросе, эти ошибки не обнаруживаются on_error Tweepy и подобными методами.Тем не менее, я не понимаю, как написать оболочку, чтобы попытаться поймать это.Первоначально я начал свой поток с

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:, он все равно не поймает эту ошибку.(Я знаю, что в конечном итоге я хочу перезапустить поток, возможно, с увеличением задержки отката, но сейчас я просто пытаюсь выяснить, могу ли я просто перехватить ошибку.)

Какой правильный способ перехватитьэто, и поддерживать мой поток?Очевидно, что это бот, который должен работать вечно, поэтому мне не нужно постоянно смотреть на него, чтобы убедиться, что он все еще работает, если есть сбой в сети.

1 Ответ

0 голосов
/ 12 мая 2019

Ошибка, которую вы видите, определена в библиотеке OpenSSL, поэтому вы не можете нормально ее вызывать. Все, что вам нужно использовать, чтобы исправить это

import OpenSSL

и ошибка должна начать распознаваться в вашей программе.

У вас уже должен быть установлен этот библиотечный пип (одна из библиотек, которую вы используете, уже зависит от него!) Но на случай, если по какой-то причине это не так, вы можете использовать:

pip install pyopenssl

Надеюсь, это поможет.

...