types.py中的这段代码是做什么的?

时间:2010-01-02 01:55:54

标签: python

try:
    raise TypeError
except TypeError:
    try:
        tb = sys.exc_info()[2]
        TracebackType = type(tb)
        FrameType = type(tb.tb_frame)
    except AttributeError:
        # In the restricted environment, exc_info returns (None, None,
        # None) Then, tb.tb_frame gives an attribute error
        pass
    tb = None; del tb

我根本无法理解这段代码。这是什么目的?

3 个答案:

答案 0 :(得分:4)

获取回溯对象和帧对象是一个技巧,以便可以为TracebackType和FrameType分配其类型。它只是引发一个异常,因此它可以捕获异常,然后从sys.exc_info获取追溯和帧。

答案 1 :(得分:0)

代码尝试找出sys.exc_info()返回的回溯所使用的类型,并将这些类型分配给变量TracebackTypeFrameType

为此,首先需要引发异常并捕获它(TypeError),以便sys.exc_info()可以返回此异常的回溯。然后检查此回溯以确定类型。最后,删除了本地tb变量,以避免不必要的循环引用(请参阅sys.exc_info()的{​​{3}}中的警告)。

答案 2 :(得分:0)

好像这段代码用于获取调用堆栈。如果从http://pyref.infogami.com/sys.exc_info研究exc_info函数,你会发现函数返回3个值的元组,其中第三个是Traceback对象。该对象包含随后显示的调用堆栈信息。