我改了traceback.print_异常要输出最后一帧的局部变量,请执行以下操作:
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>
在上面的例子中,由于我不知道self.foo公司它破坏了join()函数。我想修改我的自定义回溯,以打印使用的属性及其值,如下所示:
^{pr2}$我开始使用ast模块解析源代码,以查找属性并在框架的局部变量中查找它们。它适用于我上面的一个用例,但是它太脆弱了,无法支持任何源代码行。最好的办法是什么?在
以下是我用于测试用例的代码:
class Foo(object):
foo = 1
def boom(self):
return ','.join(self.foo)
f = Foo()
f.boom()
如果与局部变量列表中的self匹配,则可以列出当前对象的属性和方法:
您可以通过检查
getattr(f, i)
是否不是一个函数来进行筛选(以避免像boom: <bound method Foo.boom of <__main__.Foo object at 0x0000000001E2B908>>
这样的行)。在我想这不是最好的解决办法,但它应该能解决你的问题。在
相关问题 更多 >
编程相关推荐