В 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"
который, возможно, менее симпатичный.