Geekflare wird von unserem Publikum unterstützt. Wir können Affiliate-Provisionen durch den Kauf von Links auf dieser Website verdienen.
Teilen:

Effektives Debugging mit der Python Assert-Anweisung

Effektives-Debugging-mit-der-Python-Assert-Anweisung
Invicti Web Application Security Scanner – die einzige Lösung, die eine automatische Verifizierung von Schwachstellen mit Proof-Based Scanning™ bietet.

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 Aussage behaupten in Python für effektives Debuggen.

Wenn Sie an einem Projekt arbeiten, definieren Sie mehrere Module. Dazu gehören Funktionen, Klassendefinitionen und mehr. Und Sie werden wahrscheinlich aufgrund eines Fehlers in der Implementierung auf Fehler oder unerwartete Ergebnisse stoßen. Assert-Anweisungen sind beim Debuggen eines solchen Codes hilfreich.

In diesem Tutorial lernen wir die Syntax zur Verwendung der assert-Anweisung kennen, gefolgt von Codebeispielen, um sie in Aktion zu sehen. Wir werden auch sehen, was Behauptungsfehler sind und wie wir sie verwenden können, um die Fehler im Code während der Entwicklung zu beheben.

Lassen Sie uns beginnen!

How to Use the Assert Statement in Python

Wir werden die Syntax lernen, um die assert-Anweisung zu verwenden, und dann mit dem Codieren einiger Beispiele fortfahren.

Syntax der Assert-Anweisung

Beginnen wir mit der Syntax, um die assert-Anweisung in Python zu verwenden:

assert expression, message

Hier

  • expression ist ein beliebiger gültiger Python-Ausdruck, der ausgewertet werden soll. 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 bewertet zu True, löst die assert-Anweisung keinen Fehler aus und gibt nichts zurück. Dies zeigt an, dass das Programm wie erwartet funktioniert.
  • Besitzt das expression ist nicht mehr True, ein AssertionError Ausnahme wird ausgelöst.
  • message ist ein optional Schnur. Sie können eine Meldung angeben, die in der Ablaufverfolgung immer dann angezeigt wird, wenn eine AssertionError Ausnahme wird ausgelöst.

Lassen Sie uns als Nächstes einige Beispiele programmieren, bei denen uns die assert-Anweisung dabei helfen kann, saubereren und fehlerfreien Code zu schreiben.

Die in diesem Tutorial verwendeten Codebeispiele finden Sie in diesen GitHub-Kern.

Python’s Assert Statement Examples

Pythons-Assert-Statement-Beispiele

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, dass Sie nicht versehentlich die eingestellt haben discount Variable zu einem Wert hinzufügen, können Sie eine Assertion hinzufügen. Der auszuwertende Ausdruck lautet: discount <= max_discount.

>>> max_discount = 50
>>> discount = 20
>>> assert discount <= max_discount

Hier discount (20) ist kleiner als max_discount (50). Die Assert-Anweisung wirft also keinen Fehler aus.

Die AssertionError-Ausnahme

Besitzt das discount Variable auf einen Wert größer als gesetzt ist 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 wir mit der assert-Anweisung auch eine optionale Nachrichtenzeichenfolge angeben können.

Lassen Sie uns auch eine Nachrichtenzeichenfolge verwenden, die eine aussagekräftigere Diagnoseinformation liefert. Fügen wir der assert-Anweisung einen Python-F-String hinzu, der auch die Werte von enthält discount funktioniert 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 funktioniert max_discount Variablen.

Debugging and Testing Python Functions with Assert

Beim Definieren von Funktionen können Sie manchmal versehentlich Bugs (logische Fehler) einführen, die verhindern, dass Ihre Funktion wie beabsichtigt funktioniert.

Debuggen und Testen von Python-Funktionen mit Assert

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 Wert bonus
  • Wenn ein Schüler die Bonusfrage beantwortet hat, wird der Boolean bonus is True, 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 funktioniert 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

Technisch ist es möglich. Aber nehmen wir an, 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 der Python-assert-Anweisung einen beschreibenden f-String hinzu:

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 auch max_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 größer ist als max_score. Wenn ja, kehren wir zurück max_score.
  • Ansonsten kehren wir 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.

A Note on AssertionError Exception

Obwohl eine AssertionError-Ausnahme auftritt, wenn der Ausdruck als False ausgewertet wird, sollten wir daran denken, solche Fehler nicht zu behandeln wie Ausnahmen. Gemeint sind wir sollte nicht tun etwas wie das:

try:
    <doing this>
except AssertionError:
    <do this>

Im vorherigen 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 sind Plausibilitätsprüfungen für Code und helfen beim Schreiben von sauberem Code. Die Ausnahmebehandlung hingegen dient dazu, unerwartete Fehler zur Laufzeit zu antizipieren und zu behandeln. Diese enthalten häufig ungültige Eingabetypen und -werte.

Zusammenfassend sollten Sie die Python-Assert-Anweisung für ein effektives Debugging verwenden und AssertionErrors nicht als Ausnahmen behandeln.

Fazit

Dieses Tutorial hat Ihnen geholfen zu verstehen, wie Sie die Assert-Anweisung in Python verwenden. Hier ist eine Zusammenfassung dessen, was Sie gelernt haben:

  • Python-Assert-Anweisungen (Assertionen) nehmen die Form an assert expression. Diese prüft, ob die expression is True. Wenn es nicht zu werten ist True, ein AssertionError Ausnahme wird ausgelöst.
  • Sie können das Assert auch mit der Syntax verwenden assert expression, message. Dadurch wird die ausgedruckt message Zeichenfolge, wann immer ein AssertionError 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.

Danke an unsere Sponsoren
Weitere großartige Lektüre zum Thema Entwicklung
Treiben Sie Ihr Geschäft an
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti verwendet das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu verifizieren und innerhalb weniger Stunden umsetzbare Ergebnisse zu generieren.
    Versuchen Sie es mit Invicti
  • Web-Scraping, Wohn-Proxy, Proxy-Manager, Web-Unlocker, Suchmaschinen-Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie es mit Brightdata
  • Semrush ist eine All-in-One-Lösung für digitales Marketing mit mehr als 50 Tools in den Bereichen SEO, Social Media und Content-Marketing.
    Versuchen Sie es mit Semrush
  • Intruder ist ein Online-Schwachstellenscanner, der Cyber-Sicherheitslücken in Ihrer Infrastruktur findet, um kostspielige Datenschutzverletzungen zu vermeiden.
    MIT DER INTELLIGENTEN SCHADENKALKULATION VON Intruder