Die Verwendung von assert
und das Auslösen von Ausnahmen dienen beide der Kommunikation.
-
Assertions sind Aussagen über die Korrektheit des Codes, die sich an Entwickler richten: Eine Assertion im Code informiert die Leser des Codes über Bedingungen, die erfüllt sein müssen, damit der Code korrekt ist. Eine zur Laufzeit fehlschlagende Assertion informiert Entwickler darüber, dass im Code ein Fehler vorliegt, der behoben werden muss.
-
Ausnahmen sind Hinweise auf nicht-typische Situationen, die zur Laufzeit auftreten können, aber nicht vom vorliegenden Code gelöst werden können. Diese sind für den aufrufenden Code gedacht, um dort behandelt zu werden. Das Auftreten einer Ausnahme bedeutet nicht zwangsläufig, dass ein Fehler im Code vorliegt.
Beste Praxis
Daher, wenn du das Auftreten einer spezifischen Situation zur Laufzeit als Fehler betrachtest, über den du die Entwickler informieren möchtest ("Hallo Entwickler, diese Bedingung deutet darauf hin, dass irgendwo ein Fehler vorliegt, bitte korrigiere den Code."), dann verwende eine Assertion. Wenn die Assertion die Eingabeargumente deines Codes überprüft, solltest du in der Dokumentation typischerweise hinzufügen, dass dein Code ein "undefiniertes Verhalten" aufweist, wenn die Eingabeargumente gegen diese Bedingungen verstoßen.
Wenn das Auftreten dieser Situation hingegen in deinen Augen kein Anzeichen eines Fehlers ist, sondern eher eine (vielleicht seltene, aber) mögliche Situation, die stattdessen vom Client-Code behandelt werden sollte, löse eine Ausnahme aus. Die Situationen, in denen eine Ausnahme ausgelöst wird, sollten Bestandteil der Dokumentation des jeweiligen Codes sein.
Gibt es eine Leistungs [...] beeinträchtigung bei der Verwendung von assert
Die Auswertung von Assertions kostet Zeit. Sie können jedoch zur Kompilierzeit eliminiert werden. Dies hat jedoch einige Konsequenzen, siehe unten.
Gibt es ein [...] Wartungsproblem bei der Verwendung von assert
Normalerweise verbessern Assertions die Wartbarkeit des Codes, da sie die Lesbarkeit verbessern, indem sie Annahmen explizit machen und während der Laufzeit regelmäßig diese Annahmen überprüfen. Dies hilft auch dabei, Regressionen zu erkennen. Es gibt jedoch eine Sache, die beachtet werden muss: Ausdrücke, die in Assertions verwendet werden, sollten keine Seiteneffekte haben. Wie oben erwähnt, können Assertions zur Kompilierzeit eliminiert werden - was bedeutet, dass auch potenzielle Seiteneffekte verschwinden würden. Dies könnte - unbeabsichtigt - das Verhalten des Codes ändern.
66 Stimmen
-O und -OO Python-Parameter werden Ihre Behauptungen beseitigen. Das sollte Ihr Denken darüber anregen, wofür es gut ist.
6 Stimmen
Der Link von Thomasz Zielinski ist defekt, er lautet nun: mail.python.org/pipermail/python-list/2013-November/660568.html . Ich bin mir ziemlich sicher, dass pipermail eine instabile ID-Funktion hat. Ich habe andere Links innerhalb desselben pipermail gefunden, die auf dieselbe URL mit derselben Absicht verweisen.
9 Stimmen
Im Falle, dass mail.python.org/pipermail/python-list/2013-November/660568.html erneut verschoben wird, ist es archiviert unter archive.is/5GfiG. Der Titel des Beitrags lautet "When to use assert" und ist ein ausgezeichneter Beitrag (eigentlich ein Artikel) zu den bewährten Methoden für Python
assert
.0 Stimmen
Beantwortet das deine Frage? Was ist die Verwendung von "assert" in Python?
3 Stimmen
Ich sehe nie Leute in der Praxis Python-Skripte mit "-O" oder "-OO" ausführen.