max*_*max 10 python debugging stack-trace python-3.x
我对两个对象之间的区别感到困惑:
inspect.trace()正在处理异常时返回的帧列表sys.exc_info()[2](或在调用中传递sys.excepthook)返回的回溯这两个对象是否包含相同的信息,只是组织成不同的数据结构?如果没有,那么另一个没有?
从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)
Run Code Online (Sandbox Code Playgroud)
(与3.2或2.7相同),正如它所做的那样,但它传递了它getinnerframes,根据文档字符串使用一些有用的信息对其进行注释:
获取回溯帧和所有低帧的记录列表.
每个记录包含一个框架对象,文件名,行号,函数名称,上下文行列表以及上下文中的索引.
而且,因为我很好奇这实际意味着什么:
import sys
import inspect
from pprint import pprint
def 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_next
def inspecter():
try:
errorer()
except Exception, e:
pprint(inspect.trace())
Run Code Online (Sandbox Code Playgroud)
当从提示中调用时,回忆起许多字段和对象具有易于查找的定义:
>>> syser()
<frame object at 0x1441240>
6
10
<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)]
Run Code Online (Sandbox Code Playgroud)
(行号因为我弄乱了格式化而跳了起来)
inspect.trace() 显然有点好.
| 归档时间: |
|
| 查看次数: |
2134 次 |
| 最近记录: |