Überprüfung von Ausnahmen in Python mit doctest
Beim Schreiben von Code in Python müssen wir oft sicherstellen, dass unsere Funktionen wie erwartet funktionieren, insbesondere wenn es um Fehlerbehandlung geht. Ein häufiges Szenario ist das Testen, ob eine Funktion unter bestimmten Bedingungen eine Ausnahme auslöst. Wenn Sie das doctest
-Modul von Python verwenden, um Ihre Tests durchzuführen, fragen Sie sich vielleicht: Kann ich überprüfen, dass mit doctest
eine Ausnahme ausgelöst wird? Die Antwort lautet: Ja, absolut! Lassen Sie uns erkunden, wie man doctest
nutzt, um Ausnahmen in Ihren Python-Funktionen zu überprüfen.
Das Problem: Überprüfung von Ausnahmen
Betrachten Sie eine Funktion namens foo(x)
. Diese Funktion wurde entworfen, um eine Ausnahme auszulösen, wenn ihr Argument kleiner als null ist. Die zentrale Frage hier ist, wie man einen doctest
schreibt, der bestätigt, dass die Funktion in diesem Szenario korrekt funktioniert. Insbesondere wollen wir sicherstellen, dass eine Ausnahme ausgelöst wird, wenn wir einen Wert kleiner als null übergeben.
Beispiel-Funktion
Hier ist eine einfache Version der Funktion foo(x)
:
def foo(x):
if x < 0:
raise ValueError("x muss nicht-negativ sein")
return x
Die Lösung: Schreiben eines doctest
Um einen doctest
zu erstellen, der auf Ausnahmen überprüft, verwenden wir den folgenden Ansatz. In unserem doctest
können wir angeben, dass wir erwarten, dass eine Ausnahme ausgelöst wird, wenn foo()
mit einem Wert aufgerufen wird, der den Fehler auslösen sollte. So geht’s Schritt für Schritt:
Schritt 1: Schreiben Sie den Doctest
In der Docstring Ihrer Funktion können Sie einen Testfall hinzufügen, der die erwartete Ausnahme demonstriert. So sieht das aus:
def foo(x):
"""
Gibt x zurück, wenn es nicht-negativ ist.
Löst aus:
ValueError: Wenn x < 0.
Beispiele:
>>> foo(-1)
Traceback (letzter Aufruf zuletzt):
...
ValueError: x muss nicht-negativ sein
>>> foo(3)
3
"""
if x < 0:
raise ValueError("x muss nicht-negativ sein")
return x
Schritt 2: Führen Sie den Doctest aus
Um den doctest
auszuführen, fügen Sie folgendes Snippet am Ende Ihres Python-Skripts ein:
if __name__ == "__main__":
import doctest
doctest.testmod()
Schritt 3: Erwartete Ausgabe
Wenn Sie das Skript ausführen, verarbeitet doctest
die Beispiele in der Docstring. Wenn alles korrekt funktioniert, sehen Sie keine Ausgabe (was darauf hinweist, dass alle Tests bestanden wurden). Wenn die Ausnahme nicht wie erwartet ausgelöst wird, wird doctest
einen Fehler melden.
Zusätzliche Ressourcen
Für weitere Informationen darüber, wie Sie doctest
effektiv in Ihren Modulen verwenden können, besuchen Sie die offizielle doctest-Moduldokumentation.
Fazit
Die Verwendung von doctest
, um sicherzustellen, dass Ausnahmen korrekt ausgelöst werden, ist nicht nur möglich; es ist ganz einfach! Indem Sie ein paar Zeilen in der Docstring Ihrer Funktion hinzufügen, können Sie das Verhalten Ihres Codes effektiv dokumentieren und testen, sodass es den erwarteten Mustern entspricht. Wenn Sie neue Funktionen schreiben oder bestehende testen, bietet doctest
eine leistungsstarke Möglichkeit, beispielgetriebene Tests direkt neben Ihrem Code einzufügen. Viel Spaß beim Robustmachen Ihres Codes und happy coding!