Python中“assert”有什么用?

2022-09-05 00:58:03

这是什么意思?如何使用?assert


答案 1

该语句几乎存在于每种编程语言中。它有两个主要用途:assert

  1. 它有助于在程序的早期检测问题,其中原因很清楚,而不是稍后在其他操作失败时。例如,Python中的类型错误可以经历几层代码,然后再实际引发一个(如果早期没有捕获)的代码。Exception

  2. 它作为其他阅读代码的开发人员的文档,他们看到并可以自信地说,从现在开始,它的条件就成立。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!"

不要像调用函数一样使用括号。这是一个声明。如果这样做,您将运行 将元组作为第一个参数。assertassert(condition, message)assert(condition, message)

至于禁用它们,当在优化模式下运行时,where is ,assert语句将被忽略。只需传递标志:python__debug__False-O

python -O script.py

有关相关文档,请参阅此处


答案 2

注意括号。正如在其他答案中指出的那样,在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)Falseassert(False,)True