Fehler, Validierung und Fehlersuche · Übung
Löse bei ungültigen Daten einen Fehler aus
In der vorigen Lektion wurde die Eingabe vor dem Umwandeln geprüft. Eine wiederverwendbare Funktion kann aber nicht neben jedem Aufrufer stehen und fragen: „Bist du dir da sicher?“ Sie muss auch ihre eigene Regel schützen.
Angenommen, eine Funktion braucht einen Titel. Leerzeichen allein ergeben keinen brauchbaren Titel:
def clean_required_title(title):
clean_title = title.strip()
if not clean_title:
raise ValueError("A title cannot be empty")
return clean_title
Die Bedingung nutzt die Wahrheitsprüfung aus Kapitel 9. Nach .strip() gilt ein leerer String als falsch. Deshalb ist not clean_title wahr, wenn kein Text übrig bleibt.
Löse einen bestimmten Fehler aus
Die entscheidende Zeile lautet:
raise ValueError("A title cannot be empty")
ValueError besagt, dass die Art des Werts akzeptabel ist (es wurde ein String übergeben), sein Inhalt hier aber ungeeignet ist. Der Text in den Klammern erklärt die verletzte Regel.
Wenn Python raise erreicht, endet die aktuelle Funktion sofort. Sie wird nicht bis zum darunterstehenden return fortgesetzt.
Dadurch unterscheidet sich raise von der Rückgabe einer Fehlermeldung:
returngibt dem Aufrufer ein normales Ergebnis;raisemeldet, dass die Funktion kein normales Ergebnis erzeugen konnte.
Führe den gültigen Fall aus und mache ihn dann ungültig
Führe dieses Beispiel einmal aus. Entferne dann Dune aus dem String und führe es erneut aus. Beim zweiten Durchlauf siehst du den ValueError und seine Meldung.
Der Fehler ist hier beabsichtigt. Ausnahmsweise zeigt die rote Meldung einen Erfolg: Die Funktion hat ihre Regel geschützt, statt stillschweigend unbrauchbare Daten zurückzugeben.
Validiere vor dem normalen Ergebnis
Die Reihenfolge ist wichtig:
Bereinige den Titel.
Prüfe den bereinigten Titel.
Löse einen Fehler aus, wenn er ungültig ist.
Gib andernfalls den gültigen Titel zurück.
So bleibt der normale Ablauf leicht lesbar. Die nächste Lektion zeigt, wie ein Aufrufer einen bestimmten Fehler abfangen und darauf reagieren kann.
Was passiert, wenn clean_required_title(" ") die Zeile mit raise erreicht?
Schütze einen erforderlichen Namen
Die Übung verwendet dasselbe Muster für den Namen einer lernenden Person. Bereinige den Text, lehne ein leeres Ergebnis ab und gib nur einen gültigen Namen zurück.
Aufgabe
Vervollständige clean_required_name(name).
Verwende
.strip()und speichere das Ergebnis inclean_name.Wenn
clean_nameleer ist, löse einenValueErrormit genau der Meldung"A name cannot be empty"aus.Gib andernfalls
clean_namezurück.
Verwende die Wahrheitsprüfung für leere Strings aus Kapitel 9: if not clean_name:. Behalte den Beispielaufruf bei, damit das Programm Ada ausgibt.