为什么 exc_traceback returns None
Why exc_traceback returns None
sys.exc_info() returns 一个元组(类型,值,回溯)。
所以 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
你看到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
。
sys.exc_info() returns 一个元组(类型,值,回溯)。
所以 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
你看到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
。