0

Python では、再帰 (dor) の深さを取得しようとしています。すべての dor をコードに追加する前は問題なく動作していましたが、dor を追加した後、コードに関する属性エラーを受け取りました。ここに私がエラーを受け取っている関数があります

 def parse(json,dor=0):
      parse.index[dor]=0
      parse.keyList[dor]=[]
      parse.jsonDict[dor]=dict()
      parse.json[dor]=remove_white(json)
4

1 に答える 1

1

免責事項:あなたがしていることはおそらく間違ったことです

以前は、関数オブジェクトに属性を設定していたため、コードは機能していました。

def foo():
  foo.bar = 4

実行すると、関数オブジェクトはbarそれ自体に属性を設定します。__setitem__ただし、 (角かっこで)を追加した場合:

def foo():
  foo.bar[dor] = 4

あなたは今あなたが修正したいと言っていますがfoo.barfoo.barまだ存在していません!初めて実行する前に、オブジェクトを手動で設定することで、これを「修正」できます。

def foo():
  foo.bar[dor] = 4

foo.bar = {}
foo()

ほとんどの場合、コード内の再帰の深さを追跡するために別のオブジェクトを使用することで、この混乱全体を完全に回避したいと思うでしょう。あなた何かをすることができるからといって、あなたがすべきだという意味ではありません。

編集:コードを見ると、の関数ではなくクラスを使用する必要があるようですparse。クラスを使用することは、それに作用する一連のメソッドを使用して可変状態をカプセル化するため、理にかなっています。もちろん、標準ライブラリのJSONモジュールを紹介する義務もあります。

于 2013-01-24T06:45:00.203 に答える