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
我根本无法理解这段代码。这是什么目的?
答案 0 :(得分:4)
获取回溯对象和帧对象是一个技巧,以便可以为TracebackType和FrameType分配其类型。它只是引发一个异常,因此它可以捕获异常,然后从sys.exc_info
获取追溯和帧。
答案 1 :(得分:0)
代码尝试找出sys.exc_info()
返回的回溯所使用的类型,并将这些类型分配给变量TracebackType
和FrameType
。
为此,首先需要引发异常并捕获它(TypeError
),以便sys.exc_info()
可以返回此异常的回溯。然后检查此回溯以确定类型。最后,删除了本地tb
变量,以避免不必要的循环引用(请参阅sys.exc_info()
的{{3}}中的警告)。
答案 2 :(得分:0)
好像这段代码用于获取调用堆栈。如果从http://pyref.infogami.com/sys.exc_info研究exc_info函数,你会发现函数返回3个值的元组,其中第三个是Traceback对象。该对象包含随后显示的调用堆栈信息。