Effektives Debuggen mit dem Python Assert Statement

Bist du ein Programmierer? Wenn dies der Fall ist, ist das Debuggen eine wesentliche Fähigkeit, unabhängig von der Sprache, in der Sie programmieren. In diesem Artikel erfahren Sie, wie Sie die verwenden behaupten statement in Python für effektives Debuggen.
Wenn Sie an einem Projekt arbeiten, definieren Sie mehrere Module. Dazu gehören Funktionen, Klassendefinitionen und mehr. Und aufgrund eines Fehlers in der Implementierung werden Sie wahrscheinlich auf Fehler oder unerwartete Ergebnisse stoßen. Behaupten Sie stateElemente sind beim Debuggen solchen Codes hilfreich.
In diesem Tutorial lernen wir die Syntax zur Verwendung des Assert statement gefolgt von Codebeispielen, um es in Aktion zu sehen. Wir werden auch sehen, was Assertion-Fehler sind und wie wir sie nutzen können, um die Fehler im Code während der Entwicklung zu beheben.
Lassen Sie uns beginnen!
So verwenden Sie den Assert Statement in Python
Wir lernen die Syntax zur Verwendung des Assert statement, und fahren Sie dann mit dem Codieren einiger Beispiele fort.
Syntax des Assert Statement
Beginnen wir mit der Syntax zur Verwendung des Assert statement in Python:
assert expression, message
Hier
expression
ist jeder gültige Python-Ausdruck, der ausgewertet werden sollateD. Dies kann eine Bedingung für den Wert einer Variablen, den Wahrheitswert einer Variablen, den Rückgabewert einer Funktion und mehr sein.- Solange die
expression
auswertenatesTrue
, die Behauptung statement gibt keinen Fehler aus und gibt nichts zurück. Dieser Indikatorates, dass das Programm wie erwartet funktioniert. - Besitzt das
expression
ist nicht mehrTrue
, einAssertionError
Ausnahme wird ausgelöst. message
ist ein optional Schnur. Sie können eine Meldung angeben, die in der Ablaufverfolgung immer dann angezeigt wird, wenn eineAssertionError
Ausnahme wird ausgelöst.
Fahren wir als Nächstes mit dem Codieren einiger Beispiele fort, in denen der Assert-Statement kann uns dabei helfen, saubereren und fehlerfreien Code zu schreiben.
Die in diesem Tutorial verwendeten Codebeispiele finden Sie in dieser GitHub-Kerninhalt.
Python's Assert StateBeispiele

Betrachten Sie das folgende Beispiel. Angenommen, Sie haben eine discount
Variable in Ihrem Code. Aber Sie möchten, dass sein Wert immer kleiner oder gleich dem ist max_discount
.
Um zu überprüfen, ob Sie einen Unfall habenally Stellen Sie das nicht ein discount
Um eine Variable einem Wert zuzuordnen, können Sie eine Behauptung hinzufügen. Der auszuwertende Ausdruckate ist: discount <= max_discount
.
>>> max_discount = 50
>>> discount = 20
>>> assert discount <= max_discount
Hier discount
(20) ist kleiner als max_discount
(50). Also die Behauptung statement löst keinen Fehler aus.
Die AssertionError-Ausnahme
Besitzt das discount
Die Variable wird auf den Wert gre gesetztater als max_discount
, ein AssertionError
Ausnahme wird ausgelöst.
>>> discount = 75
>>> assert discount <= max_discount
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
Wir wissen, dass die Behauptung statement ermöglicht es uns auch, eine optionale Nachrichtenzeichenfolge anzugeben.
Lassen Sie uns auch eine Nachrichtenzeichenfolge verwenden, die mehr gibt descriptLive-Diagnoseinformationen. Zur Behauptung stateFügen wir nun einen Python-F-String hinzu, der auch die Werte von enthält discount
und max_discount
.
>>> assert discount <= max_discount, f"discount should be at most {max_discount}; got discount = {discount}"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: discount should be at most 50; got discount = 75
Wie in der Ausgabezelle oben zu sehen, ist die AssertionError
Ausnahme enthält jetzt die Werte der discount
und max_discount
Variablen.
Debuggen und Testen von Python-Funktionen mit Assert
Beim Definieren von Funktionen können Sie manchmal versehentlich Fehler (logische Fehler) einführen, die prevverhindern, dass Ihre Funktion wie vorgesehen funktioniert.

Nehmen wir ein Beispiel. Angenommen, es gibt einen Test in einer Klasse und die Schüler haben die Möglichkeit, eine Bonusfrage zu beantworten. Jeder Student, der die Bonusfrage versucht, erhält 10 zusätzliche Punkte im Test. 😄
Betrachten Sie die folgende Funktion get_final_score
:
- Es nimmt eine aktuelle Punktzahl auf,
score
, und ein boolescher Wertbonus
. - Wenn ein Schüler die Bonusfrage beantwortet hat, wird der Boolean
bonus
isTrue
, und sie erhalten 10 Punkte mehr als ihre aktuelle Punktzahl. - Die Funktion gibt dann die endgültige Punktzahl zurück.
def get_final_score(score,bonus):
if bonus:
score += 10
return score
Machen wir ein paar Aufrufe der Funktion. Das sehen wir bei Scores von 34 und 40 mit bonus
einstellen True
und False
, die Endnoten sind 44 bzw. 40.
print(get_final_score(34,True))
# 44
print(get_final_score(40,False))
# 40
Die maximale Punktzahl für den Test beträgt jedoch beispielsweise 50. Wenn ein Schüler also 49 Punkte erzielt und auch die Bonusfrage beantwortet hat, funktioniert die Funktion get_final_score
wird die Endnote gerne auf 59 berechnen.
print(get_final_score(49,True))
# 59
Technically, es ist möglich. Gehen wir jedoch davon aus, dass ein Student nicht mehr als die maximal mögliche Punktzahl für den Test erreichen kann. 🙂
Lassen Sie uns also a initialisieren max_score
Variable. Und erfassen Sie die zurückgegebene Punktzahl von der Funktion in der final_score
variabel.
Anschließend fügen wir eine Assertion hinzu, die prüft, ob die final_score
ist weniger als die max_score
.
def get_final_score(score,bonus):
if bonus:
score += 10
return score
final_score = get_final_score(47,True)
max_score = 50
assert final_score <= max_score
Wir erhalten jetzt eine AssertionError-Ausnahme für den Funktionsaufruf get_final_score(47,True)
:
Traceback (most recent call last):
File "main.py", line 17, in <module>
assert final_score <= max_score
AssertionError
Jetzt fügen wir a hinzu descriptive-F-String zum Python-Assert-Statement:
assert final_score <= max_score,f"final_score should be at most {max_score}; got {final_score}"
Traceback (most recent call last):
File "main.py", line 17, in <module>
assert final_score <= max_score,f"final_score should be at most {max_score}; got {final_score}"
AssertionError: final_score should be at most 50; got 57
Ändern der Funktion
Lassen Sie uns zurückgehen und die Definition von ändern get_final_score
Funktion, um das unerwartete Verhalten zu beheben:
- Die Funktion
get_final_score
nimmt auchmax_score
als ein Parameter. - Wir prüfen ggf
bonus
ist wahr. Wenn True, addieren wir 10 Punkte zur Score-Variablen. - Dann prüfen wir ggf
score
ist grater alsmax_score
. Wenn ja, kehren wir zurückmax_score
. - Anderewise, wir kehren zurück
score
.
Wir haben jetzt dafür gesorgt, dass das Endergebnis immer kleiner oder gleich ist max_score
.
def get_final_score(score,bonus,max_score):
if bonus:
score += 10
if score > max_score:
return max_score
return score
Schreiben Sie als schnelle Übung einige Behauptungen, um zu bestätigen, dass die Funktion jetzt wie erwartet funktioniert.
Ein Hinweis zur AssertionError-Ausnahme
Allerdings tritt eine AssertionError-Ausnahme auf, wenn der Ausdruck ausgewertet wirdates zu False, wir sollten daran denken, solche Fehler nicht zu behandeln Ausnahmen. Gemeint sind wir sollte nicht tun etwas wie das:
try:
<doing this>
except AssertionError:
<do this>
In der previous Beispiel auf get_final_score
, haben wir die Assertion verwendet, um zu prüfen, ob final_score
weniger als max_score
. Dann wir die Funktionsdefinition geändert so dass es keine Behauptungsfehler gibt.
Das ist, was Behauptungen sind für. Sie dienen der Plausibilitätsprüfung des Codes und helfen beim Schreiben sauberer Codes. Die Ausnahmebehandlung hingegen muss antizipiert werdenate und unerwartete Fehler zur Laufzeit behandeln. Dazu gehören häufig ungültige Eingabetypen und -werte.
Zusammenfassend lässt sich sagen, dass Sie Pythonassurance st verwenden solltenatement für effektives Debuggen und behandeln Sie AssertionErrors nicht als Ausnahmen.
Schlussfolgerung
Dieses Tutorial hat Ihnen geholfen, die Verwendung von Assert St zu verstehenatement in Python. Hier ist eine Zusammenfassung dessen, was Sie gelernt haben:
- Python behauptet stateAussagen (Behauptungen) nehmen die Form an
assert expression
. Diese prüft, ob dieexpression
isTrue
. Wenn es nicht ausgewertet wirdate zuTrue
, einAssertionError
Ausnahme wird ausgelöst. - Sie können das Assert auch mit der Syntax verwenden
assert expression, message
. Dadurch wird die ausgedrucktmessage
Zeichenfolge, wann immer einAssertionError
Ausnahme auftritt. - Sie sollten daran denken, keine Ausnahmebehandlung zu implementieren, um Behauptungsfehler zu behandeln. Und verwenden Sie Zusicherungen als hilfreiches Debugging-Tool für Plausibilitätsprüfungen Ihres Codes.
Als Entwickler helfen Ihnen Behauptungen beim Debuggen. Damit alle einzelnen Bestandteile (Module) des Projekts wie erwartet funktionieren, können Sie schreiben lernen Unit-Tests in Python.
Sehen Sie sich als Nächstes diese Liste an Anfänger-Python-Projekte daran kannst du arbeiten.