我收到错误“Key Error:'tempMax'”。
任何人都可以通过以下代码说出问题所在:
def catagorise(self, day, cat, f):
self.features.setdefault(cat, {f:{'high':0,'mid':0,'low':0}})
if f == 'tempMean':
if day.tempMean > 15.0:
self.features[cat][f]['high'] += 1
elif day.tempMean > 8.0 and day.tempMean < 15.0:
self.features[cat][f]['mid'] += 1
elif day.tempMean <= 8.0:
self.features[cat][f]['low'] += 1
if f == 'tempMax':
if day.tempMax > 15.0:
self.features[cat][f]['high'] += 1
elif day.tempMax > 8.0 and day.tempMax < 15.0:
self.features[cat][f]['mid'] += 1
elif day.tempMax <= 8.0:
self.features[cat][f]['low'] += 1
一天是一个具有变量的对象,例如平均温度,最高温度等。猫是它将被放入的类别,例如'雾','雨','雪','无',f是要检查的功能,例如'tempMax'
在创建类时定义了要素字典。
答案 0 :(得分:4)
问题出在setdefault调用中。 f设置为tempMax但从未初始化tempMax。 在这种情况下,它需要初始化为字典,因为你有'高'作为键
self.features[cat][f]['high']
self.features[cat]['tempMax'] = {}
如果你来自php背景,那么这是一个常见的错误。在python中,你必须初始化你的词典。它们必须在每个嵌套级别进行初始化。 通常的做法是......
try:
self.features[cat]
except KeyError, e:
self.features[cat] = {}
try
self.features[cat]['tempHigh']
except KeyError, e:
self.features[cat]['tempHigh'] = {}
答案 1 :(得分:1)
dict.setdefault()
仅设置密钥一次。如果您通过'tempMean'
一次,则无法设置tempMax
。
答案 2 :(得分:0)
方法的第一行
self.features.setdefault(cat,{f:{'high':0,'mid':0,'low':0}})
仅当self.features[cat]
尚未设置时才将self.features[cat]
设置为给定值,否则不执行任何操作。在后一种情况下,字典f
可能会发生(并且显然会发生)字典self.features[cat][f]
,因此尝试访问KeyError
会引发{{1}}。