Wörterbuch Schlüssel python-Fehler
Bekomme ich die Fehlermeldung "Key Error: 'tempMax'".
Kann jemand sagen, was das problem mit den folgenden code:
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
Pro Tag ist ein Objekt, das die Variablen wie die mittlere Temperatur, maximale Temperatur etc. Cat ist die Kategorie, die es in e ist.g 'Nebel', 'Regen', 'Schnee', 'None', und f ist die Funktion, um zu prüfen z.B. 'tempMax'
Funktionen Wörterbuch definiert ist, wenn die Klasse erstellt wird.
und der rest der traceback?
Der rest der traceback würde verderben den Rätsel
Der rest der traceback würde verderben den Rätsel
InformationsquelleAutor sam | 2011-03-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Problem ist in der setdefault nennen.
f wird gesetzt, um tempMax aber tempMax wurde nie initialisiert.
In diesem Fall initialisiert werden muss, als ein Wörterbuch, denn Sie haben "hohe" als Schlüssel
Wenn Sie kommen aus einer php-hintergrund, dann ist dies ein häufiger Fehler. In python, müssen Sie initialisieren Ihre Wörterbücher. Sie müssen initialisiert werden auf jeder Schachtelungsebene.
Gemeinsamen Weg, es zu tun ist...
InformationsquelleAutor eat_a_lemon
dict.setdefault()
legt nur den Schlüssel einmal. Wenn Sie pass'tempMean'
einmal, dann werden Sie nicht bekommen eine chance,tempMax
.InformationsquelleAutor Ignacio Vazquez-Abrams
Die erste Zeile in der Methode
setzt
self.features[cat]
dem angegebenen Wert nur, wenn es nicht bereits festgelegt ist, und nichts sonst. Im letzteren Fall kann es passieren (und offensichtlich passiert), dass das Wörterbuchself.features[cat]
nicht über den Schlüsself
, so versuchen, den Zugangself.features[cat][f]
erhöhen wird eineKeyError
.InformationsquelleAutor Sven Marnach