我修改了 traceback.print_exception 以输出最后一帧的本地变量:
Traceback (most recent call last):
File "/home/aconrad/work/smlib.traceback/tests.py", line 287, in test_display_variable_that_is_not_local
f.boom()
File "/home/aconrad/work/smlib.traceback/tests.py", line 284, in boom
return ','.join(self.foo)
TypeError
local variables:
- self: <tests.Foo object at 0x3233350>
在上述情况下,本地人不够有用,因为我不知道破坏 join() 函数的 self.foo 的值。我想修改我的自定义回溯以打印使用的属性及其值,如下所示:
attributes:
- self.foo: 1
我开始使用 ast 模块解析源代码以查找属性并在框架的本地变量中查找它们。它适用于我上面的一个用例,但它太脆弱而无法支持任何源代码行。实现这一目标的最佳方法是什么?
这是我用于测试用例的代码:
class Foo(object):
foo = 1
def boom(self):
return ','.join(self.foo)
f = Foo()
f.boom()