为什么 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