Python没有找到关键价值

时间:2015-03-23 02:40:46

标签: python dictionary key

以下是我的代码摘录,我遇到了麻烦。问题只是代码没有找到字典中的密钥,如错误所述:

Traceback (most recent call last):
File "G:\Game.py", line 386, in <module>
battle()
File "G:\Game.py", line 197, in battle
if int(playerStats["playerExperience"]) > int(levels['{0}'.format("{0}".format(playerStats['level']))]):
KeyError: 'level'

这些是适用的代码的两部分:

global playerStats
      if int(playerStats["playerExperience"]) > int(levels['{0}'.format("{0}".format(playerStats['level']))]):

global playerStats
playerStats={
 "playerMaxHp":"0",
 "playerCurrentHp":"0",
 "playerAtk":"0",
 "playerDef":"0",
 "playerDefending":"0",
 "playerRunAblility":"0",
 "playerExperience":"0",
 "level":"1"
 }

编辑:和&#39;级别&#39;这里指的是:

levels={ #"Level"="Experience"
 "2":"5",
 "3":"12",
 "4":"20",
 }

EDIT2:为级别添加了另一个值:

levels={ #"Level"="Experience"
 "1":"0",
 "2":"5",
 "3":"12",
 "4":"20",
 }

解决: 问题是在早期的代码行中,我正在替换字典,而不是添加它。一旦我修复了它,代码工作正常。

3 个答案:

答案 0 :(得分:0)

首先,这是什么加倍:

'{0}'.format("{0}".format(playerStats['level']))

我认为一种格式就足够了。 (实际上,由于playerStats['level']的值已经是一个字符串,因此您可以完全保留格式。)其次,levels是什么?这是一个清单吗?一本字典?如果您将playerStats字典传递给该字典,您将评估为:

if int('0') > int(levels['1']):

因此,如果levels['1']是有效的项目,那么它应该有效。但是,如果levels是列表或元组,或者是没有'1'密钥的字典,那么它就会赢。

答案 1 :(得分:0)

嗯,你的代码运行得很顺利。

为什么不使用整数,而不是使用字符串。像这样的东西

global playerStats
playerStats={
 "playerMaxHp": 0,
 "playerCurrentHp": 0,
 "playerAtk": 0,
 "playerDef": 0,
 "playerDefending": 0,
 "playerRunAblility": 0,
 "playerExperience": 0,
 "level": 1
 }

levels={ #"Level"="Experience"
 1: 0,
 2: 5,
 3: 12,
 4: 20
 }

if playerStats["playerExperience"] > levels[playerStats['level']]:
    pass
    # do something
else:
    pass
    # do something

答案 2 :(得分:-1)

尝试使用&#39;而不是&#34; :

playerStats={
'playerMaxHp': 0,
'playerCurrentHp': 0,
'playerAtk': 0,
'playerDef': 0,
'playerDefending': 0,
'playerRunAblility': 0,
'playerExperience': 0,
'level': 1
}

对于加速器也是如此:如果playerStats [&#39; playerExperience&#39;]&gt; ....