我读一些源代码,并在多个地方我看到assert的用法.

正好这意味着什么呢?其用法是什么?

2011-02-28 13:11:45

回答:

几乎每个编程语言中存在的assert语句。当您做...

assert condition

...告诉程序测试条件,并触发错误,如果该条件为 false。

在 Python 中,它是大致等效于此︰

if not condition:
    raise AssertionError()

试试在 Python 解释器中︰

>>> assert True
>>> assert False
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

断言可以包括可选的消息,并在完成后,可以禁用它们调试。请参阅下面的相关文档。

特别说明︰ 断言是语句并不是函数。与打印不同的是,Python 3 它是仍在一个语句.

可选的消息语法︰assert False, "You have asserted something false."请参阅此答案的问题。

其他答案都指出,assert是类似于如果给定的条件不能则引发异常。一个重要的区别是,断言语句获取被忽略,如果您编译您的代码使用优化选项。文档指出assert expression可以更好地描述为等效于

if __debug__:
   if not expression: raise AssertionError

这可以是断言的很有用的如果想要彻底测试您的代码,然后当你快乐任何情况下失效的释放优化的版本优化时, __debug__变量成为假和条件将停止计算。此功能也可以捕捉您如果您依赖断言并没有意识到他们已经消失了。

提防括号。正如有已指出上面,在 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"

第一个将不起作用的原因是计算结果为Truebool( (False, "Houston we've got a problem") ).

assert(False)语句,它们只是冗余括号括起False,评估其内容的。但与assert(False,)括号现在是一个元组,而非空元组计算结果为True的布尔值的上下文中。

我在这里是查找有关此确切信息 parens 和后续消息。谢谢。

其他用户已授予您链接到文档。

您可以尝试以下交互式外壳程序中︰

>>> assert 5 > 2
>>> assert 2 > 5
Traceback (most recent call last):
  File "<string>", line 1, in <fragment>
builtins.AssertionError:

第一次尝试没有执行任何操作,而第二个引发和异常。这是第一个提示︰ 断言用于检查在您的代码中的给定位置应为 true 的条件 (通常情况下,开始 (前提条件) 和一个函数 (后置条件) 的末尾)。

断言实际高度与按合同,这是非常有用的工程实践编程︰

http://en.wikipedia.org/wiki/Design_by_contract

也是说我们可以检测代码中的情况类似,断言 (2 > 5) 以及其他引发错误继续吗?

是的就是这样。

失去 parens,断言不是函数。

丢失 parens 比它看起来更重要。请参见下面.

令人感兴趣。在回答中得到纠正。

Assert 语句有两种形式。

简单的表单,assert <expression>,等效于

if __​debug__:
    if not <expression>: raise AssertionError

扩展窗体,assert <expression1>, <expression2>,相当于

if __​debug__:
    if not <expression1>: raise AssertionError, <expression2>
内容来源于Stack Overflow What is the use of “assert” in Python?
请输入您的翻译

What is the use of “assert” in Python?

确认取消