用更精确的位置信息回溯
loctraceback的Python项目详细描述
想更准确地看到你在哪里或在回溯中的位置 callstack python代码在一行中有几个地方 出错了?即使代码是在运行时创建的 eval或exec或者如果找不到源代码?
那么这个包裹是给你的。
此模块可以消除某些代码类型的歧义:
i/j/k# which divide?prev[prev[0]]# which prev ?[e[0]foriind[j]ifgot[i]==e[i]]# lots going on hereexec(some_code%10,namespace)# code at runtime
通过在示例中运行代码给出的一些示例输出::
分区示例:
Traceback(mostrecentcalllast):File"tb-div.py",line9,in<module>atoffset52a/b/ca/b/c-ZeroDivisionError:floatdivisionbyzero
列表理解示例:
File"tb-comp.py",line9,in<listcomp>atoffset18[e[0]foriind[j]ifgot[i]==e[i]]return[e[0]foriin.0ifgot[i]==e[i]]------IndexError:listindexoutofrange
exec示例:
Traceback(mostrecentcalllast):File"tb-exec.py",line11,in<module>atoffset39exec(s)exec(s)-------File"<string>",line4,in<module>atoffset18z=x/y-ZeroDivisionError:divisionbyzero
调用堆栈中的隔离函数示例:
File"call-fib.py",line8,infibatoffset58returnfib(n-1)+fib(n-2)returnfib(n-1)+fib(n-2)----------File"call-fib.py",line10,in<module>atoffset54print("fib({})={}".format(2,fib(2)))------
这些模块通过添加 片段反编译信息以获得更精确的位置信息。
尽管api来自python 3.6,但代码运行在3.3或更高版本上。 对其他python版本的后台移植留给 读者。
参见these slides了解 这背后的技术信息。