2010-01-02 63 views
1
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 

我完全不明白这段代码。它的目的是什么?这些来自types.py的代码是做什么的?

回答

4

获取一个回溯对象和一个框架对象是一种技巧,以便TracebackType和FrameType可以被分配它们的类型。它只是引发异常,以便能够捕捉异常,然后从sys.exc_info获取回溯和帧。

0

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

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

0

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