Python 未找到键值
Python Not Finding Key Value
以下是我遇到问题的代码摘录。问题很简单,代码没有在字典中找到键,如错误所述:
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"
}
编辑:'levels' 在这里指的是:
levels={ #"Level"="Experience"
"2":"5",
"3":"12",
"4":"20",
}
EDIT2:为级别添加了另一个值:
levels={ #"Level"="Experience"
"1":"0",
"2":"5",
"3":"12",
"4":"20",
}
已解决:
问题是在较早的代码行中,我正在替换字典,而不是添加它。一旦我解决了这个问题,代码就可以正常工作了。
尝试使用 ' 而不是 " :
playerStats={
'playerMaxHp': 0,
'playerCurrentHp': 0,
'playerAtk': 0,
'playerDef': 0,
'playerDefending': 0,
'playerRunAblility': 0,
'playerExperience': 0,
'level': 1
}
访问器也一样:if playerStats['playerExperience'] > ....
首先,这个加倍是什么:
'{0}'.format("{0}".format(playerStats['level']))
我觉得一种格式就够了。 (实际上,由于playerStats['level']
的值已经是一个字符串,所以完全可以不使用格式。)其次,什么是levels
?是清单吗?一本字典?如果您将 playerStats
字典传递给它,您将评估为:
if int('0') > int(levels['1']):
所以如果 levels['1']
是一个有效的项目,它应该有效。但是如果 levels
是一个列表或元组,或者一个没有 '1'
键的字典,它就不会。
好吧,你的代码运行对我来说很好。
为什么不使用整数,而不是使用字符串。像这样
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
以下是我遇到问题的代码摘录。问题很简单,代码没有在字典中找到键,如错误所述:
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"
}
编辑:'levels' 在这里指的是:
levels={ #"Level"="Experience"
"2":"5",
"3":"12",
"4":"20",
}
EDIT2:为级别添加了另一个值:
levels={ #"Level"="Experience"
"1":"0",
"2":"5",
"3":"12",
"4":"20",
}
已解决: 问题是在较早的代码行中,我正在替换字典,而不是添加它。一旦我解决了这个问题,代码就可以正常工作了。
尝试使用 ' 而不是 " :
playerStats={
'playerMaxHp': 0,
'playerCurrentHp': 0,
'playerAtk': 0,
'playerDef': 0,
'playerDefending': 0,
'playerRunAblility': 0,
'playerExperience': 0,
'level': 1
}
访问器也一样:if playerStats['playerExperience'] > ....
首先,这个加倍是什么:
'{0}'.format("{0}".format(playerStats['level']))
我觉得一种格式就够了。 (实际上,由于playerStats['level']
的值已经是一个字符串,所以完全可以不使用格式。)其次,什么是levels
?是清单吗?一本字典?如果您将 playerStats
字典传递给它,您将评估为:
if int('0') > int(levels['1']):
所以如果 levels['1']
是一个有效的项目,它应该有效。但是如果 levels
是一个列表或元组,或者一个没有 '1'
键的字典,它就不会。
好吧,你的代码运行对我来说很好。
为什么不使用整数,而不是使用字符串。像这样
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