Python中“assert”有什么用?
这是什么意思?如何使用?assert
该语句几乎存在于每种编程语言中。它有两个主要用途:assert
它有助于在程序的早期检测问题,其中原因很清楚,而不是稍后在其他操作失败时。例如,Python中的类型错误可以经历几层代码,然后再实际引发一个(如果早期没有捕获)的代码。Exception
它作为其他阅读代码的开发人员的文档,他们看到并可以自信地说,从现在开始,它的条件就成立。assert
当您这样做时...
assert condition
...您告诉程序测试该条件,如果条件为假,则立即触发错误。
在Python中,它大致相当于这个:
if not condition:
raise AssertionError()
在 Python shell 中尝试一下:
>>> assert True # nothing happens
>>> assert False
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError
断言可以包含可选消息,您可以在运行解释器时禁用它们。
在断言失败时打印消息:
assert False, "Oh no! This assertion failed!"
不要像调用函数一样使用括号。这是一个声明。如果这样做,您将运行 将元组作为第一个参数。assert
assert(condition, message)
assert
(condition, message)
至于禁用它们,当在优化模式下运行时,where is ,assert语句将被忽略。只需传递标志:python
__debug__
False
-O
python -O script.py
有关相关文档,请参阅此处。
注意括号。正如在其他答案中指出的那样,在Python 3中,assert
仍然是一个语句,因此通过类比,可以推断出相同的或但你不应该。print(..)
assert(..)
raise(..)
这是错误的:
assert(2 + 2 == 5, "Houston we've got a problem")
这是正确的:
assert 2 + 2 == 5, "Houston we've got a problem"
第一个不起作用的原因是,计算结果为 。bool( (False, "Houston we've got a problem") )
True
在语句中,这些只是多余的括号,它们根据它们的内容来计算。但是,带有括号的现在是一个元组,并且非空元组在布尔上下文中计算为。assert(False)
False
assert(False,)
True