Python 尽管存在密钥,但字典密钥错误
我有点不知所措。我正在初始化字典中的一个字典,它可以正常工作,直到我想检查while语句中定义的值为止 在这里,我得到了一个“屏幕宽度”的关键错误。 我的第一次尝试是查看变量是否被意外修改,方法是将整个字典写入.txt文件,然后是我在while中访问的子字典部分本身……所有这些都可以工作,并得到我预期的结果,但仍然在while中,而我忽略了键错误 初始化:Python 尽管存在密钥,但字典密钥错误,python,dictionary,Python,Dictionary,我有点不知所措。我正在初始化字典中的一个字典,它可以正常工作,直到我想检查while语句中定义的值为止 在这里,我得到了一个“屏幕宽度”的关键错误。 我的第一次尝试是查看变量是否被意外修改,方法是将整个字典写入.txt文件,然后是我在while中访问的子字典部分本身……所有这些都可以工作,并得到我预期的结果,但仍然在while中,而我忽略了键错误 初始化: def __init__(self): self.Data = { 'Configurati
def __init__(self):
self.Data = {
'Configuration': { 'MaxMapWidth': 256, 'MaxMapHeight': 256,
'TileWidth': 1216, 'TileHeight': 694,
'ScreenWidth': 1366, 'ScreenHeight': 768,
'MaxBiewDistance': 10 },
'Map': {},
'Tiles': {},
'Player': {
'Position': { 'MapName': None, 'X': 1, 'Y': 1, 'Direction': 0 }# in degree }
}
}
方法:
def MyDo(self):
f = open("e:\\test\\test.txt", "w")
for key in self.Data:
f.write(key + "\n")
for subkey in self.Data[key]:
f.write(" " + subkey + "\n")
if ("Configuration" in key):
f.write(" " + str(self.Data[key][subkey]) + "\n");
rayNumber = 0
f.write(str(self.Data['Configuration']['ScreenWidth']))
while (rayNumber < self.Data['Configuration']['Screenwidth']):
#.... do my thing
rayNumber = rayNumber + 1
除了关键的错误之外,我想说这一切都按预期进行。因此,我这里的问题是,是什么导致了这个关键错误(尤其是因为它似乎都是正确的,而且关键是存在的)?您犯了一个案例错误——请仔细观察:
f.write(str(self.Data['Configuration']['ScreenWidth']))
while (rayNumber < self.Data['Configuration']['Screenwidth']):
f.write(str(self.Data['Configuration']['ScreenWidth']))
而(光线数
第一次用大写字母W拼写,第二次用小写字母拼写。这是两个不同的、不相关的子键。可能是因为
'ScreenWidth'!='屏幕宽度“
(区分大小写!)。看到while loop line.tnx现在已经读了好几个小时了--我看了所有的公告,。。。。但情况并非如此。tnxbtw很高兴知道为什么-1(从我看到的问题很清楚,这是一个愚蠢的事情,因为一封被忽视的案例信不应该授予a-据我所知,因此很高兴知道为什么)就是这样。我真的很讨厌发生这种情况……除了w/w.tnx之外,其他所有东西都会接受,因为stackoverflow让我觉得区分大小写比帮助更麻烦——唉,Python语言是区分大小写的,大多数文件系统也是如此,我讨厌这种情况(我确实怀念例如Pascal和Windows文件系统的不区分大小写的特性——尽管我还没有怀念到足以让我切换回这些技术的程度:-)。至少对于您控制的数据结构,您可能会选择将所有键都设置为小写。由于c#,我已经习惯于将camelcase设置为与所有内容一样好的大小写。否则,我就不会在python中费心了(这里也是windows用户^^)
f.write(str(self.Data['Configuration']['ScreenWidth']))
while (rayNumber < self.Data['Configuration']['Screenwidth']):