0
# keyid is a string used for id in ndb keys. quest.reward=['1commonhead']
for keyid in quest.reward:
    item = ndb.Key('InventoryItem',keyid).get().toDict()
    rewards.append(item)

TypeError: キー ID は文字列または数値でなければなりません。{'gearType': '', 'level': 1L, 'color': 'lime', 'intelligence': 2L, 'damage': 2L, 'className': 'uncommonsword', 'grade': 'uncommon' を受け取りました, 'subType': 'sword', 'prettyName': 'リスの珍しい剣', 'type': 'weapon'}

kwds use_cache と use_memcache False を渡そうとしましたが、うまくいかなかったようです。これが私の現在の修正です。私には面倒に感じます。コンテキストキャッシングについて何か不足していますか?

rewards = []
for keyid in quest.reward:
    item = keyid
    if type(keyid) == str:
        item = ndb.Key('InventoryItem',keyid).get().toDict()
    rewards.append(item)
4

1 に答える 1

0

quest.reward の内容を理解していないようです。

エラーは、辞書をキー要素として使用できないことを示しています。これは、あなたがしようとしていることです。

quest.reward を反復した結果は

{'gearType': '', 'level': 1L, 'color': 'lime', 'intelligence': 2L, 'damage': 2L, 'className': 'uncommonsword', 'grade': 'uncommon', 'subType': 'sword', 'prettyName': 'Uncommon sword of the Squirrel', 'type': 'weapon'}

これは quest.reward が辞書のリストであることを意味します (少なくとも 1 つの辞書)

キャッシングがこれと関係があるとは思えません。どこquest.rewardから来て、どのように定義されているか。

于 2013-10-14T23:56:08.277 に答える