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: Key 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 回答