LINUX.ORG.RU

Python: как поймать любое исключение и вывести его данные?


0

3

Когда в python не ловишь исключение, интерпретатор печатает стек вызовов и тип исключения.

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

Спасибо.

#python 2.7
import sys

print sys.exec_info() #кортеж с инфой об ошибке из трех элементов
#==========================================================
try:
    do_something
except Exception as msg: #Exception - класс, содержащий почти все искл.
    print msg[2]                #msg тот же самый кортеж что и sys.exec_info()
second_buddha ()
Ответ на: комментарий от second_buddha

except Exception as msg: #Exception - класс, содержащий почти все искл.

Вот на этом «почти» я недавно прокололся - кто-то из моей команды решил бросить BaseException.

Как выше сказали, traceback в зубы и вперед.

anonymous ()
import logging
...
logger = logging.getLogger("somename")
...
try:
    ...
except:
    logger.exception("Exception!")

Логгер запишет в лог требуемый трейсбэк и ваше сообщение переданное в метод exception().

SilentBob ()
Ответ на: комментарий от anonymous

Ловить BaseException не комильфо, не будет работать KeyboardInterrupt например

zz ★★★★ ()
Ответ на: комментарий от zz

Но я ведь не ловил BaseException, впрочем KeyboardInterrupt там ни к чему.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.