给定一个Exception对象是否有办法获得它的回溯?我有这样的代码:
def stuff():
try:
.....
return useful
except Exception as e:
return e
result = stuff()
if isinstance(result, Exception):
result.traceback <-- How?
发布于 2018-05-16 19:49:03
很简单:例外配备了一个__traceback__
包含追溯的属性。该属性也是可写的,可以使用异常方法方便地设置with_traceback
:
raise Exception("foo occurred").with_traceback(tracebackobj)
这正是Python 3所做的。Python 2解决方案更加丑陋:为您提供了一个专用函数,它只能在子句中使用。它返回一个包含异常,异常类型和当前正在处理的异常的追踪的元组。
所以,如果你的内部except
条款,你可以使用的输出sys.exec_info()
随着traceback模块做各种有用的东西:
>>> import sys, traceback
>>> def raise_exception():
... try:
... raise Exception
... except Exception:
... ex_type, ex, tb = sys.exc_info()
... traceback.print_tb(tb)
... finally:
... del tb
...
>>> raise_exception()
File "<stdin>", line 3, in raise_exception
发布于 2018-05-16 21:17:18
你可以试试这样的方法:
>>> try:
... raise Exception()
... except Exception as e:
... tb = e.__traceback__
...
>>> tb
<traceback object at 0x00000000022A9208>
https://stackoverflow.com/questions/-100004095
复制相似问题