1

次のコードの def load() に問題があります。

def load():
     claim = {}
     data = open("claim.DB").read().split("\n")
     for a in data:
          claimDB[a.split(",")[0]] = a.split(",")[1:]
     claim.claimDB = claimDB

何らかの理由でこの行def load():

claimDB[a.split(",")[0]] = a.split(",")[1:]

この問題の原因:

dictionary changed size during iteration

そして、claim.load() を実行するたびに dict にこれを実行させます。

{'': [], 'asl97': ['charles', 'donboricua'], 'a': ['s', 'l', '9', '7', 'c', 'h', 'a', 'r', 'l', 'e', 's']}

{'': [], 'a': ['s', '', '', 'l', '', '', '9', '', '', '7', '',' '、'c'、''、''、'h'、''、''、'a'、''、''、'r'、''、''、'l'、''、' '、'e'、''、''、's']}

4

1 に答える 1

0

claimDBこれは、すでにoutsideを反復処理している場合に発生しますload()。次のコード:

claimDB = dict(x=1)

def load():
    data ="1,2\n2,3".split("\n")
    for a in data:
        # modify claimDB <--- BAD
        claimDB[a.split(",")[0]] = a.split(",")[1:]

# iterate over claimDB <--- OK
for k in claimDB:
    load()

原因RuntimeError: dictionary changed size during iteration

これが事実であると仮定すると、 の内容を抽出し、それをclaimDBループする必要があります。

# iterate over the contents of claimDB; it's safe to modify it now, 
# because .items() copies the contents for the generator; list() makes it python 3 safe.
for k, v in list(claimDB.items()):
    load()
于 2013-11-15T07:14:39.560 に答える