KeyError und IndexError (Python)
Kurz: Ein Schlüssel fehlt im Dictionary (KeyError) oder ein Listenindex liegt außerhalb der Liste (IndexError).
Genauer: Beide Fehler entstehen beim Zugriff auf Elemente, die nicht existieren. Sie sind Cousins des ArrayIndexOutOfBoundsException aus Java.
Im Detail
KeyError
alter = {"Mia": 17}
print(alter["Tom"]) # KeyError: 'Tom'Der Schlüssel "Tom" ist nicht im Dictionary. Auch Tippfehler und Groß-/Kleinschreibung gehören dazu. Lösungen:
alter.get("Tom")gibtNonezurück,alter.get("Tom", 0)einen Standardwert.- Vorher prüfen:
if "Tom" in alter:. collections.defaultdictodersetdefaultnutzen.- Bei JSON-Daten die tatsächlichen Schlüssel ausgeben (
print(daten.keys())).
IndexError
zahlen = [10, 20, 30]
print(zahlen[3]) # IndexError: list index out of rangeDie gültigen Indizes sind 0 bis len(liste) - 1. Häufig: Off-by-one in Schleifen (range(len(x)+1)), leere Listen, falscher Index nach dem Löschen von Elementen. Lösungen:
if i < len(zahlen):prüfen oderif zahlen:für „nicht leer“.- Mit
for z in zahlen:statt Indizes iterieren. - Negative Indizes zählen vom Ende:
zahlen[-1]. - Bei
try/except IndexErrornur dort, wo das Fehlen erwartbar ist.
Fehlersuche
Lies die Zeilennummer im Traceback, gib vor der Zeile len() oder die Schlüssel aus und prüfe, ob die Daten wirklich so aussehen, wie du denkst (leere Antwort, andere Struktur, None). Der Debugger oder print an der richtigen Stelle sparen viel Zeit.
Siehe auch: ArrayIndexOutOfBoundsException, TypeError, ModuleNotFoundError