【发布时间】:2016-07-06 10:46:51
【问题描述】:
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
【问题讨论】:
-
它确实有一个回溯,否则你会得到一个
AttributeError,但回溯的框架没有f_back。这对我来说似乎非常明智。如果您直接运行它,您期望的外框是什么? -
在标准库中的第 269 行 traceback.py 模块中相同:使用了 tb_frame.f_back。
-
这并不能真正回答我的问题。 你为什么认为会有一个外框,在这种情况下?
-
@Heartagramir 那是因为该代码在
print_stack函数内,我们需要上一帧,因为我们对print_stack函数自己的帧并不真正感兴趣。
标签: python exception sys traceback