如何在Python中从异常对象中获取堆栈跟踪?

6

我该如何从异常对象本身获取完整的堆栈跟踪信息?

考虑以下代码作为问题的简化示例:

last_exception = None
try:
    raise Exception('foo failed')
except Exception as e:
    last_exception = e
# this happens somewhere else, decoupled from the original raise
print_exception_stack_trace(last_exception)

可能是如何在Python中检查异常的堆栈跟踪?的重复问题。 - David Webb
1
嗯,是的,但是那个问题还没有得到(令人满意的)回答! - Katriel
1个回答

3

编辑:我撒谎了,抱歉。你需要的是 e.__traceback__

try:
    raise ValueError
except ValueError as e:
    print( e.__traceback__ )

>c:/python31/pythonw -u "test.py"
<traceback object at 0x00C964B8>
>Exit code: 0

这只在Python 3中有效;在早期版本中无法实现。


这不是来自异常对象本身,而是在执行跟踪中抛出异常的地方。 - camillobruni
不,显然在Python 3中可以...我刚试过了,它可以工作! - Katriel
1
@katrielalex,我该如何在Python 2.7中实现这个,我似乎找不到它。谢谢。 - Kamilski81
据我所知,您无法直接从异常对象中获取它;您必须使用traceback和/或inspect模块。 - Katriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接