如何在Python中打印异常对象的堆栈跟踪?
请注意,该问题并非关于打印最后一个异常的堆栈跟踪。异常对象可能保存在过去某个遥远的时间点。
虽然有点麻烦,但您可以使用 traceback.print_exception
。给定一个异常 ex
:
traceback.print_exception(type(ex), ex, ex.__traceback__)
例子:
import traceback
try:
1/0
except Exception as ex:
traceback.print_exception(type(ex), ex, ex.__traceback__)
# output:
# Traceback (most recent call last):
# File "untitled.py", line 4, in <module>
# 1/0
# ZeroDivisionError: division by zero
print_exception(ex)
的函数,那会更好。 - Aran-Feyprint_exc()
,它可以从 sys.info
获取有关异常的信息。 - Alex Pshenkoexception.traceback()
是一种更干净的面向对象编程语法。 - Nishanttraceback
无法正常工作。例如,如果从共享库调用Python代码。@Jean-FrançoisFabre的回答是正确的。 - user36313您可以手动迭代__traceback__
属性以打印行和文件:
def function():
raise ValueError("flfkl")
try:
function()
except Exception as e:
traceback = e.__traceback__
while traceback:
print("{}: {}".format(traceback.tb_frame.f_code.co_filename,traceback.tb_lineno))
traceback = traceback.tb_next