EMZETT.
Login

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") gibt None zurück, alter.get("Tom", 0) einen Standardwert.
  • Vorher prüfen: if "Tom" in alter:.
  • collections.defaultdict oder setdefault nutzen.
  • 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 range

Die 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 oder if zahlen: für „nicht leer“.
  • Mit for z in zahlen: statt Indizes iterieren.
  • Negative Indizes zählen vom Ende: zahlen[-1].
  • Bei try/except IndexError nur 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