0%

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:

  • return gibt dem Aufrufer ein normales Ergebnis;

  • raise meldet, 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.

Try it

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:

  1. Bereinige den Titel.

  2. Prüfe den bereinigten Titel.

  3. Löse einen Fehler aus, wenn er ungültig ist.

  4. 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).

  1. Verwende .strip() und speichere das Ergebnis in clean_name.

  2. Wenn clean_name leer ist, löse einen ValueError mit genau der Meldung "A name cannot be empty" aus.

  3. Gib andernfalls clean_name zurü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.