sys.exc_info()返回一个元组(类型,值,追溯)
所以sys.exc_info()[2]
是我们的追溯对象。
为什么它不会使用此代码捕获异常回溯:
import sys
try:
1/0
except ZeroDivisionError:
print sys.exc_info()[2].tb_frame.f_back
tb_frame和f_back用法已在此解释: Frame Objects
答案 0 :(得分:2)
您看到None
因为没有外框。您直接执行此操作,因此当前帧是最后一帧。为了证明这一点,我创建了一个demo.py
:
import sys
try:
1/0
except ZeroDivisionError:
print sys.exc_info()[2].tb_frame.f_back
应该看起来很熟悉,而且是一个微不足道的caller.py
:
import demo
现在看到差异:
$ python demo.py
None
$ python caller.py
<frame object at 0x10bc34c20>
在第二种情况下,如果有外框(即caller.py
),则不会看到None
。