исключение 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, или, как альтернатива, как я могу сказать, что это такое, чтобы он мог справиться с этим?

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 в вашем коде, и вам проще сказать, какой модуль вывел исключение.

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