Я знаю, что print(e)
(где e — исключение) печатает произошедшее исключение
но я пытался найти python-эквивалент Java e.printStackTrace()
, который точно отслеживает исключение до строки, в которой оно произошло, и печатает всю его трассировку.
Может ли кто-нибудь сказать мне эквивалент e.printStackTrace()
в Python?
В дополнение к другим замечательным ответам, мы можем использовать методы библиотеки 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'