Python では、assert
はステートメントであり、関数ではありません。これは意図的な決定でしたか?assert
関数の代わりにステートメント (および予約語) にする利点はありますか?
docsによると、 に展開されますassert expression1, expression2
if __debug__:
if not expression1: raise AssertionError(expression2)
ドキュメントには、「現在のコード ジェネレーターは、コンパイル時に最適化が要求されたときに assert ステートメントのコードを発行しない」とも書かれています。詳細は不明ですが、これを可能にするために特別なケースが必要だったようです。ただし、特殊なケースを使用して、関数への呼び出しを最適化することもできassert()
ます。
関数の場合assert
、次のように記述できます。
assert(some_long_condition,
"explanation")
しかし、assert
はステートメントであるため、タプルは常に に評価されTrue
、次の結果が得られます。
SyntaxWarning: assertion is always true, perhaps remove parentheses?
正しい書き方は、
assert some_long_condition, \
"explanation"
これは間違いなくあまりきれいではありません。