Ich habe gelesen, wann Assert vs Ausnahmen zu verwenden, aber ich bin immer noch nicht "es bekommen". Es scheint, als wenn ich denke, dass ich in einer Situation bin, in der ich Assert verwenden sollte, später in der Entwicklung finde ich, dass ich "schaue, bevor ich springe", um sicherzustellen, dass die Behauptung nicht versagt, wenn ich die Funktion rufe. Da es ein anderes Python-Idiom gibt, das es vorzieht, try-except zu verwenden, schaffe ich es im Allgemeinen, die Assertion zu verwerfen und stattdessen eine Ausnahme auszulösen. Ich muss noch einen Ort finden, an dem es richtig erscheint, eine Behauptung zu verwenden. Kann mir jemand ein gutes Beispiel geben?Beispiel Verwendung von Assert in Python?
Antwort
Eine gute Richtlinie assert
verwendet, wenn seine Auslösemittel einen Bug in Ihrem Code. Wenn Ihr Code etwas annimmt und auf der Annahme beruht, wird empfohlen, diese Annahme mit einer assert
zu schützen. Dieses assert
Fehler bedeutet, dass Ihre Annahme nicht korrekt ist, was bedeutet, dass Ihr Code nicht korrekt ist.
Allgemein, Assert ist es, eine Annahme zu überprüfen, die Sie über Ihren Code haben, d. H. Zu diesem Zeitpunkt ist entweder die Assert erfolgreich, oder Ihre Implementierung ist irgendwie fehlerhaft. Eine Ausnahme ist eigentlich ein Fehler zu erwarten und "umarmen", d. H. Es Ihnen erlauben, damit umzugehen.
Ein gutes Beispiel ist die Überprüfung der Argumente einer Funktion für Konsistenz:
def f(probability_vector, positive_number):
assert sum(probability_vector) == 1., "probability vectors have to sum to 1"
assert positive_number >= 0., "positive_number should be positive"
# body of function goes here
neigen dazu, Assert zu verwenden, um nach Dingen zu suchen, die nie passieren sollten. so etwas wie eine Plausibilitätsprüfung.
Eine andere Sache, zu erkennen, dass asserts entfernt werden, wenn optimiert:
Der aktuelle Code-Generator sendet keinen Code für eine assert-Anweisung, wenn Optimierung bei der Kompilierung angefordert wird.
+1, um darauf hinzuweisen, dass das, was behauptet wird, entfernt werden, wenn Sie Python mit dem '-O'-Flag aufrufen.Der Punkt ist, dass, wenn Sie erwarten, dass sich Ihr Code jemals anders verhält, wenn Sie die Behauptungen herausnehmen, dann missbrauchen Sie sie - sie dienen nur dem Debuggen. –
- 1. Missverstehe ich die Verwendung von assert()?
- 2. Verwendung von Eigenschaften in Python wie in Beispiel C#
- 3. Einfaches Beispiel für die Verwendung von ast.NodeVisitor?
- 4. Beispiel für die Verwendung von streamhtmlparser
- 5. Beispiel für die Verwendung von PyLZMA
- 6. Verwendung von Dereferenzierungsoperator in diesem Beispiel (C++)
- 7. Threading Beispiel in Python
- 8. Warum Q_ASSERT anstelle von Assert
- 9. C# Throw Ausnahme bei Verwendung Assert?
- 10. Verwendung von Klassennamen in Python
- 11. Verwendung von Eval in Python?
- 12. ASSERT vs. ATLASSERT vs. assert
- 13. Richtlinien für die Verwendung von Assert versus Verify
- 14. Assert Modul in Nodejs?
- 15. Beispiel für waitpid() in Verwendung?
- 16. Android LocationServices.GeofencingApi Beispiel Verwendung
- 17. Beispiel für Unterklassen von String.Template in Python?
- 18. Beispiel für die richtige Verwendung von QThread in PyQt?
- 19. Gutes Beispiel für die Verwendung von AppDomain
- 20. Beispiel für die Verwendung von getopt.pas
- 21. Python 2.7 Komponententest: Assert Logger Warnung ausgelöst
- 22. Beispiel für die Verwendung von fastcgi_finish_request()
- 23. Beispiel für die Verwendung von Scalaz Monad
- 24. Gutes Beispiel für die Verwendung von UIAlertControler
- 25. Verwendung von Lambda in Python
- 26. Verwendung von distplot in Python
- 27. python scipy.odrpack.odr Beispiel (mit Beispiel Eingabe/Ausgabe)?
- 28. Selen WebDriver Beispiel in Python
- 29. Wann sollte assert() in Matlab verwendet werden?
- 30. Python Multiprocessing Documentation Beispiel
Interessant - Ich wusste nicht, dass '0.' eine Abkürzung für' 0.0' war. repl sagt es ist aber. Ich könnte es jedoch nicht in echtem Code verwenden, weil es übermäßig "clever" erscheint und leicht übersehen wird. Könnte als Tippfehler verstanden werden, aber 0.0 wird immer als Float verstanden. – Daenyth
Das ähnelt einer Situation, in der ich eine Funktion hatte, die ein Element aus einer 2D-Matrix holte. Es machte Sinn zu behaupten, dass die Zeilen- und Spalteneingaben tatsächlich in den Grenzen der Matrix lagen. Aber später habe ich etwas gemacht, wo ich ein Element genommen habe und etwas mit angrenzenden Elementen machen wollte. Als ich anfing, dies zu programmieren, musste ich spezielle Fälle haben, wenn das Element am Rand war, weil benachbarte Elemente außerhalb der Matrix waren. Es schien besser, stattdessen Ausnahmen zu verwenden. – Colin
Wie würden Ausnahmen die Änderung des Codes erleichtern? Wenn Sie das Verhalten der Funktion ändern, müssen Sie den Ausnahmeerhöhungsabschnitt noch ändern, nicht wahr? – pberkes