最後のフレームのローカルを出力するように 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 モジュールを使用してソースの解析を開始し、属性を見つけてフレームのローカルで検索しました。上記の 1 つのユース ケースでは機能しますが、脆弱すぎてソース行をサポートできません。これを達成するための最良の方法は何ですか?
テストケースに使用したコードは次のとおりです。
class Foo(object):
foo = 1
def boom(self):
return ','.join(self.foo)
f = Foo()
f.boom()