7
如何从Exception对象本身获取完整的堆栈跟踪?如何从Python 2.7中的异常对象获取堆栈跟踪?
考虑下面的代码作为降低该问题的例子:
last_exception = None
try:
raise Exception('foo failed')
except Exception as e:
print "Exception Stack Trace %s" % e
如何从Exception对象本身获取完整的堆栈跟踪?如何从Python 2.7中的异常对象获取堆栈跟踪?
考虑下面的代码作为降低该问题的例子:
last_exception = None
try:
raise Exception('foo failed')
except Exception as e:
print "Exception Stack Trace %s" % e
堆栈跟踪本身没有存储在异常对象本身。但是,您可以使用sys.exc_info()
和traceback
模块打印最近一次异常的堆栈跟踪。例如:
import sys
import traceback
try:
raise Exception('foo failed')
except Exception as e:
traceback.print_tb(*sys.exc_info())
如果您不想立即显示堆栈跟踪,它应该是可以储存的sys.exc_info()
返回值的地方。
一味地存储sys.exc_info()的结果会导致不良...来自http://docs.python.org/library/sys.html#sys.exc_info - “警告将跟踪返回值分配给正在处理异常的函数中的局部变量将导致循环引用。“ –
此外,我会建议http://docs.python.org/library/traceback.html#traceback.format_exc获取格式化的追溯字符串,而不是traceback.print_tb(* sys.exc_info())。 –