При отладке кода Python в интерактивном приглашении (REPL) часто я напишу какой-то код, который вызывает исключение, но я не завернул его в try
/except
, поэтому, как только возникает ошибка, Я навсегда потерял объект исключения.
Часто выводится сообщение о трассировке и ошибке Python. Например, при получении URL-адреса сервер может вернуть ошибку 40x, и вам потребуется содержимое ответа через error.read()
... но у вас больше нет объекта ошибки. Например:
>>> import urllib2
>>> f = urllib2.urlopen('http://example.com/api/?foo=bad-query-string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
...
urllib2.HTTPError: HTTP Error 400: Bad Request
Что, ответила тело ответа? Вероятно, в нем была важная информация об ошибках...
Я понимаю, что обычно легко перезапустить код, завернутый в try/except, но это не идеально. Я также понимаю, что в этом конкретном случае, если бы я использовал библиотеку requests
(которая не вызывает ошибки HTTP), у меня не было бы этой проблемы... но мне действительно интересно, существует ли более общий способ для получения последнего объекта исключения в приглашении Python в этих случаях.