Я знаю, что print(e)
(где e - это исключение) печатает возникшее исключение, но я пытался найти Python-эквивалент Java, e.printStackTrace()
который точно отслеживает исключение до той строки, в которой оно произошло, и печатает весь его след.
Может кто-нибудь сказать, пожалуйста, эквивалент e.printStackTrace()
в Python?
java
python
exception
stack-trace
koool
источник
источник
format_exc
вместо этого получить строку.Есть также
logging.exception
.Вывод:
(Из http://blog.tplus1.com/index.php/2007/09/28/the-python-logging-module-is-much-better-than-print-statements/ через Как напечатать полный обратный вызов без остановка программы? )
источник
traceback.print_exc()
?В Java это делает следующее ( документы ):
Это используется так:
В Java поток стандартных ошибок не буферизуется, поэтому вывод поступает немедленно.
Та же семантика в Python 2:
Python 3
В Python 3 мы можем получить трассировку непосредственно от объекта исключения (который, вероятно, ведет себя лучше для многопоточного кода). Кроме того, stderr буферизуется строкой , но функция print получает аргумент flush, так что это будет немедленно выведено в stderr:
Вывод:
Поэтому в Python 3,
traceback.print_exc()
хотя он и используетсяsys.stderr
по умолчанию , буферизуется вывод, и вы можете его потерять. Таким образом, чтобы получить как можно более эквивалентную семантику, в Python 3 используйтеprint
withflush=True
.источник
Добавление других больших ответов, мы можем использовать в Python
logging
библиотечнойdebug()
,info()
,warning()
,error()
иcritical()
методу. Цитирование из документации по Python 3.7.4 ,Это означает, что вы можете использовать
logging
библиотеку Python для вывода сообщенийdebug()
другого типа, иlogging
библиотека будет включать в свой вывод трассировку стека. Имея это в виду, мы можем сделать следующее:И это выведет:
источник