Kapitel 10
Fehler, Validierung und Fehlersuche
Fehler haben verschiedene Formen
In Kapitel 1 hast du Fehler kennengelernt. Du hast absichtlich einen SyntaxError ausgelöst, einen falsch geschriebenen Namen korrigiert und gelernt, zuerst die letzte Zeile einer Fehlermeldung zu lesen.
Jetzt kannst du diese Erfahrungen in drei nützliche Kategorien einordnen. Die Kategorie zeigt dir, wo du mit der Suche beginnen kannst.
1. Python versteht den Code nicht
Ein Syntaxfehler bedeutet, dass der Code nicht den Grammatikregeln von Python folgt:
if temperature > 20
print("Warm day")
Der fehlende Doppelpunkt verhindert, dass Python das Programm startet. Python meldet einen SyntaxError, bevor die beabsichtigte Arbeit stattfinden kann.
Prüfe Satzzeichen, Einrückungen sowie zusammengehörige Anführungszeichen und Klammern in der Nähe der angegebenen Zeile. Die Markierung ist ein Hinweis, aber der eigentliche Fehler kann direkt davor liegen.
2. Python startet, dann schlägt eine Operation fehl
Eine Ausnahme zur Laufzeit tritt auf, während Python Code mit gültiger Syntax ausführt:
distance = 12
hours = 0
print(distance / hours)
Python versteht jede Zeile, aber eine Division durch null ist keine gültige Operation. Das Programm bricht mit einem ZeroDivisionError ab.
Weitere Ausnahmen, die dir bereits begegnet sind:
NameErrorbei einem Namen, der nicht definiert wurde;ValueError, wenn ein Wert nicht wie angefordert umgewandelt werden kann;KeyError, wenn ein Zugriff mit eckigen Klammern einen fehlenden Schlüssel in einem Dictionary anfordert.
Eine Ausnahme hat einen Typ und eine Meldung. Beide helfen dir bei der Untersuchung.
3. Das Programm läuft, liefert aber das falsche Ergebnis
Manchmal meldet Python keine Ausnahme:
price = 8
quantity = 3
total = price + quantity
print(total)
Das Programm gibt 11 aus, aber die Gesamtsumme eines Einkaufs sollte 24 sein. Das ist ein Logikfehler: Gültiger Python-Code hat etwas anderes getan, als die Anforderung vorsieht.
Da es keinen Traceback gibt, vergleiche das tatsächliche Ergebnis mit einem kleinen Ergebnis, das du selbst berechnen kannst. Untersuche dann die Werte und Operationen, die dazu geführt haben.
Benenne das Symptom, bevor du Code änderst
Frage dich:
Hat Python den Code abgelehnt, bevor er ausgeführt wurde?
Ist das Programm mit einer Ausnahme abgebrochen?
Ist es mit dem falschen Verhalten zu Ende gelaufen?
Diese Kategorien sagen nichts darüber aus, wie schwerwiegend ein Fehler ist. Ein Logikfehler von nur einem Zeichen kann teuer werden, während ein langer Traceback auf eine schnelle Korrektur hinweisen kann. Die Kategorien geben deiner Untersuchung lediglich eine nützliche erste Richtung.
Ein Programm läuft bis zum Ende, aber ein Rabatt wird zum Preis addiert statt davon abgezogen. Um welche Art von Problem handelt es sich?
Was passiert, wenn dieses Programm ausgeführt wird?
number = int("twelve")
print(number)