免責事項:あなたがしていることはおそらく間違ったことです
以前は、関数オブジェクトに属性を設定していたため、コードは機能していました。
def foo():
foo.bar = 4
実行すると、関数オブジェクトはbar
それ自体に属性を設定します。__setitem__
ただし、 (角かっこで)を追加した場合:
def foo():
foo.bar[dor] = 4
あなたは今あなたが修正したいと言っていますがfoo.bar
、foo.bar
まだ存在していません!初めて実行する前に、オブジェクトを手動で設定することで、これを「修正」できます。
def foo():
foo.bar[dor] = 4
foo.bar = {}
foo()
ほとんどの場合、コード内の再帰の深さを追跡するために別のオブジェクトを使用することで、この混乱全体を完全に回避したいと思うでしょう。あなたが何かをすることができるからといって、あなたがすべきだという意味ではありません。
編集:コードを見ると、の関数ではなくクラスを使用する必要があるようですparse
。クラスを使用することは、それに作用する一連のメソッドを使用して可変状態をカプセル化するため、理にかなっています。もちろん、標準ライブラリのJSONモジュールを紹介する義務もあります。