从inspect.trace的文档中:
检查。 跟踪 ([上下文])
返回当前帧与其中引发了当前正在处理异常的帧之间的堆栈的帧记录列表。最后一个条目表示引发异常的位置。
这表明它提供了一种很好的方法来将
sys.exc_info()[2]您获得的帧进行切片和切块。
如果查看源代码,则:
def trace(context=1): """Return a list of records for the stack below the current exception.""" return getinnerframes(sys.exc_info()[2], context)
(与3.2或2.7相同),正是它的功能,但是它通过
getinnerframes,将其传递给,并根据文档字符串用一些有用的信息对其进行注释:
获取回溯框架和所有较低框架的记录列表。
每个记录包含一个框架对象,文件名,行号,函数名,上下文行列表以及上下文中的索引。
而且,由于我对这实际上意味着什么感到好奇:
import sysimport inspectfrom pprint import pprintdef errorer(): raise Exception('foo')def syser(): try: errorer() except Exception, e: tb = sys.exc_info()[2] print tb.tb_frame print tb.tb_lasti print tb.tb_lineno print tb.tb_nextdef inspecter(): try: errorer() except Exception, e: pprint(inspect.trace())
从提示中调用时,同时回想起其中许多字段和对象具有易于查找的定义:
>>> syser()<frame object at 0x1441240>610<traceback object at 0x13eb3b0>>>> inspecter()[(<frame object at 0x14a5590>, '/tmp/errors.py', 22, 'inspecter', None, None), (<frame object at 0x14a21b0>, '/tmp/errors.py', 8, 'errorer', None, None)]
(行号跳来跳去,因为我搞砸了格式)
inspect.trace()显然好一点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)