Design von Python: Warum ist assert eine Aussage und keine Funktion?
In Pythonassert
ist eine Aussage und keine Funktion. War das eine bewusste Entscheidung? Gibt es irgendwelche Vorteile zu habenassert
eine Aussage (und ein reserviertes Wort) anstelle einer Funktion sein?
Gemäßdas docs, assert expression1, expression2
wird erweitert um
if __debug__:
if not expression1: raise AssertionError(expression2)
In den Dokumenten heißt es außerdem: "Der aktuelle Codegenerator gibt keinen Code für eine Assert-Anweisung aus, wenn zur Kompilierungszeit eine Optimierung angefordert wird." Ohne die Details zu kennen, scheint ein Sonderfall erforderlich zu sein, um dies zu ermöglichen. Ein Sonderfall könnte dann aber auch genutzt werden, um Abwesenheitsanrufe zu optimierenassert()
Funktion.
Obassert
Wäre eine Funktion, könnte man schreiben:
assert(some_long_condition,
"explanation")
Aber weilassert
ist eine Aussage, die das Tupel immer zu wertetTrue
und Sie bekommen
SyntaxWarning: assertion is always true, perhaps remove parentheses?
Die richtige Schreibweise ist
assert some_long_condition, \
"explanation"
das ist wohl weniger hübsch.