2011-07-08 40 views

回答

5

堆栈跟踪本身没有存储在异常对象本身。但是,您可以使用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()返回值的地方。

+1

一味地存储sys.exc_info()的结果会导致不良...来自http://docs.python.org/library/sys.html#sys.exc_info - “警告将跟踪返回值分配给正在处理异常的函数中的局部变量将导致循环引用。“ –

+3

此外,我会建议http://docs.python.org/library/traceback.html#traceback.format_exc获取格式化的追溯字符串,而不是traceback.print_tb(* sys.exc_info())。 –