Эквивалент e.printStackTrace в python

Я знаю, что print(e) (где e — исключение) печатает произошедшее исключение но я пытался найти python-эквивалент Java e.printStackTrace(), который точно отслеживает исключение до строки, в которой оно произошло, и печатает всю его трассировку.

Может ли кто-нибудь сказать мне эквивалент e.printStackTrace() в Python?

193
задан Aaron Hall 16 December 2016 в 05:46
поделиться

1 ответ

В дополнение к другим замечательным ответам, мы можем использовать методы библиотеки debug(), info(), warning(), error() и critical() библиотеки Python logging. Цитирование из документации для Python 3.7.4 ,

В kwargs есть три ключевых аргумента, которые проверяются: exc_info, который, если он не оценивается как ложный, вызывает информацию об исключении быть добавленным к сообщению регистрации.

Это означает, что вы можете использовать библиотеку Python logging для вывода сообщения debug() или другого типа, а библиотека logging будет включать трассировку стека в свой вывод. Имея это в виду, мы можем сделать следующее:

import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

def f():
    a = { 'foo': None }
    # the following line will raise KeyError
    b = a['bar']

def g():
    f()

try:
    g()
except Exception as e:
    logger.error(str(e), exc_info=True)

И он выдаст:

'bar'
Traceback (most recent call last):
  File "<ipython-input-2-8ae09e08766b>", line 18, in <module>
    g()
  File "<ipython-input-2-8ae09e08766b>", line 14, in g
    f()
  File "<ipython-input-2-8ae09e08766b>", line 10, in f
    b = a['bar']
KeyError: 'bar'
0
ответ дан 23 November 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: