исключение python не распознано; как обращаться с исключением?

У меня есть команда в предложении try, которое, как я знаю, вызывает исключение. Я пытаюсь поймать его в «исключении», но предложение except, похоже, не признает существование исключения. Исключение, когда необработанное (т. Е. Не заключенное в предложение try), выглядит так в интерактивном окне:

Traceback (most recent call last): File "<console>", line 1, in <module> File "C:\Users\Andy\software\Turkeys\actions.py", line 234, in annotate annotation=annotator.ncbo_annotate(thing) File "C:\Users\Andy\software\Turkeys\annotator.py", line 49, in ncbo_annotate fh = urllib2.urlopen(submitUrl, postData) File "C:\32Python27\lib\urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "C:\32Python27\lib\urllib2.py", line 406, in open response = meth(req, response) File "C:\32Python27\lib\urllib2.py", line 519, in http_response 'http', request, response, code, msg, hdrs) File "C:\32Python27\lib\urllib2.py", line 444, in error return self._call_chain(*args) File "C:\32Python27\lib\urllib2.py", line 378, in _call_chain result = func(*args) File "C:\32Python27\lib\urllib2.py", line 527, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) HTTPError: HTTP Error 500: Internal Server Error 

Когда я помещаю команду в конструкцию try / except в первый файл в этом списке, «actions.py», вот так:

 try: annotation=annotator.ncbo_annotate(thing) except HTTPError: ...do some things with this 

Я бы ожидал, что в приведенном выше предложении будет обнаружена ошибка HTTPError: HTTP Error 500: Internal Server Error, возникающая при запуске функции ncbo_annotate, но вместо этого, когда я запускаю вышеуказанное, я получаю сообщение об ошибке, говорящее, что глобальное имя «HTTPError» не определен:

 Traceback (most recent call last): File "<console>", line 1, in <module> File "C:\Users\Andy\software\Turkeys\actions.py", line 235, in annotate except HTTPError: NameError: global name 'HTTPError' is not defined 

Так в чем дело? Я думал, что python вызывает исключение, пока не найдет обработчик в предложении try или не выплюнул его необработанным. Почему мой код не знает, что такое HTTPError, или, как альтернатива, как я могу сказать, что это такое, чтобы он мог справиться с этим?

  • 'sys.excepthook' и threading
  • Как получить полную трассировку стека исключений в Python
  • Хорошая практика использования try-except-else в Python?
  • Должен ли я делать тихие исключения громче в tkinter?
  • Какое исключение я должен поднимать по неправильным / незаконным комбинациям аргументов в Python?
  • Как вы можете поймать пользовательское исключение из работника сельдерея или остановить его с префиксом `celery.backends.base`?
  • functools.partial по методу класса
  • Несколько кодов try в одном блоке
  • 4 Solutions collect form web for “исключение python не распознано; как обращаться с исключением?”

    Вероятно, вам просто нужно импортировать класс HTTPError прежде чем использовать его. Попробуйте вставить вверху вашего файла actions.py:

     from urllib2 import HTTPError 

    и тогда вы сможете использовать свой код как есть.

    Вам нужно проверить urllib2.HTTPError:

     except urllib2.HTTPError: 

    В Python 3 это:

     from urllib.error import HTTPError 

    @ Решение Эмили в порядке, но есть другой способ решить эту проблему без импорта этого класса.

    Вам просто нужно указать полное пространство имен класса исключений, который вы хотите поймать:

     except urllib2.HTTPError: 

    Таким образом, вам нужно меньше кодов import в вашем коде, и вам проще сказать, какой модуль вывел исключение.

    Interesting Posts

    Как вы можете напечатать имя переменной в python?

    Удалить символ новой строки в списке, считанном из файла

    Вывод пейджинга из python

    Как настроить несколько установок Ubuntu Python, чтобы избежать ошибки SSL в App Engine?

    Есть ли промежуточное программное обеспечение Django / плагин, который регистрирует все мои запросы организованным образом?

    Почему я не могу назначить произвольное итерабельность расширенному срезу, чей шаг равен -1?

    Использование plotly в Jupyter для создания анимированной диаграммы в автономном режиме

    ТипError: метод () принимает 1 позиционный аргумент, но 2 даны

    как оптимально подсчитывать элементы в списке python

    Поиск файла и поиск точного соответствия и печати?

    Разбор даты, которая может быть в нескольких форматах в python

    urlencode массив значений

    Пользовательские действия Python argparse с переданными дополнительными аргументами

    Django: Итерация над набором запросов без кеша

    Как расширить Django Group и использовать ее в Django User

    Python - лучший язык программирования в мире.