Kodokon kodokon.com

Eine Fehlermeldung lesen und verstehen

Lerne, eine Fehlermeldung zu entschlüsseln, statt sie wegzuklicken: Typ, Datei, Zeile und Stack Trace.

8 Min. · 3 Fragen

Diese Lektion in Kodokon öffnen

Ein Fehler ist keine Strafe. Dein Computer urteilt nicht über dich und lacht dich nicht aus: Er stellt fest, dass er nicht weiß, was er tun soll, und sagt dir, warum. Das funktioniert genau wie ein Navi, das "Route wird neu berechnet" ansagt - das ist kein Vorwurf, das ist eine Information. Der Reflex von Anfängern ist, das rote Fenster zu schließen, ohne es zu lesen. Der Reflex von Entwicklern ist, es langsam und bis zum Ende zu lesen. Es ist oft der einzige Moment, in dem die Maschine in klaren Worten mit dir spricht.

Fast jede Fehlermeldung enthält dieselben Bausteine. Den Typ des Fehlers, der ihn einer großen Familie zuordnet. Die Meldung, die in einem Satz erklärt, was nicht stimmt. Die betroffene Datei und die Zeilennummer, die dir genau sagen, wo du nachschauen musst. Und manchmal einen Stack Trace: die Liste der Schritte, die das Programm durchlaufen hat, bevor es abgestürzt ist.

PYTHON
Traceback (most recent call last):
  File "shopping.py", line 12, in <module>
    total = price * quantity
NameError: name 'quantity' is not defined
Eine Python-Meldung: die Datei, Zeile 12, der Typ NameError und seine Erklärung.

Im Beispiel oben steht bereits alles drin. Die Datei ist shopping.py, die Zeile ist die 12, der Typ ist NameError und die Meldung sagt name 'quantity' is not defined, also "der Name quantity ist nicht definiert". Im Klartext: In Zeile 12 benutzt du eine Variable quantity, die du nie angelegt hast oder deren Namen du falsch geschrieben hast. Keine komplizierte Ermittlung nötig - die Meldung enthielt die Antwort schon.

Einen Python-Stack-Trace liest man von unten nach oben: Die letzte Zeile nennt den Typ und die Erklärung, und direkt darüber stehen die Datei und die fehlerhafte Zeile. Wenn der Trace sehr lang ist, such die erste Zeile, die deine eigene Datei nennt. Zeilen, die auf unbekannte Dateien mit seltsamen Namen verweisen, gehören zu den Bibliotheken, die du benutzt: In 99 % der Fälle haben nicht sie einen Fehler, sondern die Art, wie du sie aufrufst.

JAVASCRIPT
Uncaught TypeError: Cannot read properties of
undefined (reading 'name')
    at showProfile (app.js:24:18)
    at start (app.js:41:3)
Dieselbe Logik in der Browser-Konsole: Datei app.js, Zeile 24, Spalte 18.

Ein paar Formulierungen tauchen immer wieder auf, und es lohnt sich, sie zu erkennen. not defined bedeutet, dass der Name, den du benutzt hast, an dieser Stelle nicht existiert. undefined heißt, dass die Sache existiert, aber keinen Wert hat. unexpected zeigt an, dass das Programm etwas anderes erwartet hat, typischerweise eine vergessene Klammer oder ein vergessenes Anführungszeichen. permission denied weist auf ein Rechteproblem hin, nicht auf ein Code-Problem. Und no such file or directory bedeutet, dass der Pfad, den du geschrieben hast, ins Leere führt.

Wissenscheck

Stelle sicher, dass du die wichtigsten Punkte dieser Lektion behalten hast.

  1. Welcher Teil einer Fehlermeldung sagt dir, wo du zuerst nachschauen musst?
    • Der Dateiname und die Zeilennummer
    • Die Farbe des Textes auf dem Bildschirm
    • Die Gesamtlänge der Meldung
    • Der Name deines Betriebssystems
  2. In welche Richtung liest man einen Python-Stack-Trace?
    • Von oben nach unten: Die erste Zeile nennt die Lösung
    • Von unten nach oben: Die letzte Zeile nennt den Typ und die Erklärung
    • In jede Richtung, er ist rein dekorativ
  3. Was bedeutet ein Fehler mit not defined normalerweise?
    • Der benutzte Name existiert an dieser Stelle des Programms nicht
    • Die Datei ist zu groß, um geöffnet zu werden
    • Die Internetverbindung wurde unterbrochen