Не удается поймать исключение в Python 3 - PullRequest
0 голосов
/ 12 апреля 2019

Работа с Python 3.7.3, все еще выясняя, как работает обработка исключений.

Я пишу бот xmpp, используя slixmpp. Я пытаюсь сделать так, чтобы, если он потеряет соединение с сервером, он попытался восстановить соединение. Кажется, нет никакого способа сделать это встроенным в slixmpp, поэтому я пишу что-то в свой собственный код, чтобы сделать это.

Я импортировал slixmpp как xmpp и использую его метод send_raw (), чтобы проверить, что мы все еще подключены к серверу.

    while True:
        time.sleep(5)  # Send every 5 seconds just for testing purposes
        xmpp.send_raw('aroo?')

Когда я разрываю соединение с сервером, оно выплевывает:

    Traceback (most recent call last):
      File "C:\Program Files\Python37\lib\threading.py", line 917, in _bootstrap_inner
        self.run()
      File "testcom.py", line 19, in run
        eval(self.thing)()
      File "testcom.py", line 28, in check_conn
        xmpp.send_raw('aroo?')
      File "C:\Program Files\Python37\lib\site-packages\slixmpp\xmlstream\xmlstream.py", line 926, in send_raw
        raise NotConnectedError
    slixmpp.xmlstream.xmlstream.NotConnectedError   

Я предполагаю, что "NotConnectedError" является исключением, которое мне нужно перехватить, поэтому я поместил код в блок try, например так:

    try:
        while True:
            time.sleep(5)  # Send every 5 seconds just for testing purposes
            xmpp.send_raw('aroo?')
    except NotConnectedError:
        # Do a thing
        pass

И вот что я получаю:

    Traceback (most recent call last):
      File   "testcom.py", line 28, in check_conn
        xmpp.send_raw('aroo?')
      File "C:\Program Files\Python37\lib\site-packages\slixmpp\xmlstream\xmlstream.py", line 926, in send_raw
        raise NotConnectedError()
    slixmpp.xmlstream.xmlstream.NotConnectedError                                                                                             

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
      File "C:\Program Files\Python37\lib\threading.py", line 917, in _bootstrap_inner
        self.run()
      "testcom.py", line 19, in run
        eval(self.thing)()
      File "testcom.py", line 29, in check_conn
        except NotConnectedError:
    NameError: name 'NotConnectedError' is not defined

Может кто-нибудь сказать мне, что я здесь делаю не так?

Спасибо!

1 Ответ

1 голос
/ 12 апреля 2019

Я не вижу ваш импорт, но убедитесь, что у вас есть from slixmpp.xmlstream.xmlstream import NotConnectedError, в противном случае в приложении нет определения для NotConnectedError.Вы также можете изменить NotConnectedError на xmpp.xmlstream.xmlstream.NotConnectedError, если не хотите, чтобы он также импортировался.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...