У меня есть программа, часть которой выполняет цикл. Во время выполнения этого цикла существуют исключения. Очевидно, я хотел бы, чтобы моя программа работала без ошибок, но ради прогресса, я хотел бы, чтобы программа выполнилась по всему входу и не остановке, когда исключение выдается. Самый легкий способ сделать это было бы путем реализации except
блок.
Однако, когда я делаю это, это except
s все исключения и продолжает программу, и я никогда не добираюсь для наблюдения сообщения об исключении, в котором я нуждаюсь для отладки.
Есть ли путь к except
любое произвольное исключение и смочь распечатать сообщение об исключении в except
блок?
try:
#stuff
except Exception as e:
print e
]
[]Модуль []traceback[
] предоставляет различные функции для извлечения дополнительной информации из объекта исключения ([]e[
], выше).[
] Источник [] Ошибки и исключения [] [
]Рассмотрим возможность использования модуля протоколирования на Python, это даст вам много функциональных возможностей для протоколирования проблем для последующего просмотра. Ниже приведён простой пример использования модуля протоколирования для протоколирования исключений:
import logging
LOG_FILE = '/tmp/exceptions.log'
logging.basicConfig(filename=LOG_FILE,level=logging.ERROR)
while True:
try:
# Code that may throw exceptions
except Exception, e:
logging.exception("An exception happened")
С помощью функции log.exception
внутри обработчика исключений, как это делается здесь, информация об исключении автоматически добавляется в сообщение протоколирования.
while True:
try:
# Do your stuff
except Exception, e:
print "Something happened: %s" % e
] Я считаю, что это гораздо более полезно для отладки:
from traceback import print_exc
try:
raise Exception("doh!")
except:
print_exc()