在Python中,assert是一个语句,而不是一个函数.这是一个刻意的决定吗?assert成为一个声明(和保留字)而不是一个函数有什么好处吗?
根据该 文件,assert expression1, expression2扩大到
if __debug__:
if not expression1: raise AssertionError(expression2)
Run Code Online (Sandbox Code Playgroud)
文档还说"当编译时请求优化时,当前代码生成器不会为assert语句发出代码." 在不知道细节的情况下,似乎需要一个特殊情况才能实现这一目标.但是,一个特殊情况也可用于优化对assert()函数的调用.
如果assert是一个函数,你可以写:
assert(some_long_condition,
"explanation")
Run Code Online (Sandbox Code Playgroud)
但因为assert是一个声明,元组总是评估True,你得到
SyntaxWarning: assertion is always true, perhaps remove parentheses?
Run Code Online (Sandbox Code Playgroud)
写它的正确方法是
assert some_long_condition, \
"explanation"
Run Code Online (Sandbox Code Playgroud)
这可能不那么漂亮了.