"assert"在Python中的用途是什么?

18 浏览
0 Comments

"assert"在Python中的用途是什么?

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

admin 更改状态以发布 2023年5月22日
0
0 Comments

注意括号。正如其他回答所指出的,在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)中,这些只是冗余的括号,它们求值为其内容。但是使用assert(False,),括号现在是一个元组,一个非空元组在布尔上下文中求值为True

0
0 Comments

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 "", line 1, in 
AssertionError

断言可以包括可选的消息,以及在运行解释器时可以将它们禁用。

要在断言失败时打印消息:

assert False, "Oh no! This assertion failed!"

不要像调用函数一样使用括号调用assert。它是一个语句。如果你这样做assert(condition, message),你将会以一个(condition, message)元组作为第一个参数来运行assert

至于禁用它们,在运行优化模式的python中,其中__debug__False,assert语句将被忽略。只需传递-O标志:

python -O script.py

有关相关文档,请参见这里

0