为什么exc_traceback返回None

时间:2016-07-06 10:46:51

标签: python exception sys traceback

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

1 个答案:

答案 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