断言是什么意思?它是如何使用的?
当前回答
注意括号。正如在其他回答中指出的那样,在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。
其他回答
这是一个简单的例子,保存到文件(比如b.py)
def chkassert(num):
assert type(num) == int
chkassert('a')
当$python b.py
Traceback (most recent call last):
File "b.py", line 5, in <module>
chkassert('a')
File "b.py", line 2, in chkassert
assert type(num) == int
AssertionError
其他人已经为您提供了文档链接。
您可以在交互式shell中尝试以下操作:
>>> assert 5 > 2
>>> assert 2 > 5
Traceback (most recent call last):
File "<string>", line 1, in <fragment>
builtins.AssertionError:
第一个语句什么都不做,而第二个语句引发异常。这是第一个提示:断言用于检查在代码的给定位置(通常是函数的开始(前置条件)和结束(后置条件)中应该为真条件。
断言实际上与契约编程高度相关,这是一种非常有用的工程实践:
http://en.wikipedia.org/wiki/Design_by_contract。
正如C2 Wiki上简要总结的那样:
断言是程序中特定位置的布尔表达式,除非程序中存在错误,否则该表达式将为真。
您可以使用断言语句来记录您对特定程序点上代码的理解。例如,您可以记录关于输入(前提条件)、程序状态(不变量)或输出(后置条件)的假设或保证。
如果断言失败,这是对您(或您的后继者)的一个警告,说明您在编写程序时对程序的理解是错误的,并且可能包含一个错误。
有关更多信息,John Regehr有一篇关于断言的使用的精彩博客文章,它也适用于Python断言语句。
从文档:
断言语句是向程序中插入调试断言的一种方便方法
你可以在这里阅读更多:http://docs.python.org/release/2.5.2/ref/assert.html
断言是在我们的程序中自信地陈述事实的语句。
语法:assert <条件>或assert <条件>,<错误消息>
它有一个条件/表达式,它应该总是为真。如果条件为false, assert语句将停止程序并抛出AssertionError错误消息。你的断言表达式将是你不希望在程序中出现的东西。
e.g.
Assert <条件>——使用Assert而没有<错误消息> var = int(输入("输入值1-9包含:")) 断言var != 0 打印(var) 输出: 如果输入为0: AssertionError 如果输入为1: 1 断言<条件>,<错误消息>——使用带有<错误消息>的断言 var = int(输入("输入值1-9包含:")) 断言var !=0,"输入不能为零" 打印(var) 输出: 如果输入为0: AssertionError:输入不能为零 如果输入为1: 1
重点:
它被用作调试工具。 它接受一个表达式和一个可选消息。 它几乎存在于每一种编程语言中
推荐文章
- 得到熊猫栏目的总数
- 从pandas DataFrame中删除名称包含特定字符串的列
- Mock vs MagicMock
- 如何阅读一个。xlsx文件使用熊猫库在iPython?
- 如何访问熊猫组由数据帧按键
- Pandas和NumPy+SciPy在Python中的区别是什么?
- 将列表转换为集合会改变元素的顺序
- 如何在matplotlib更新一个情节
- TypeError: ` NoneType `对象在Python中不可迭代
- 'throw'和'throw new Exception()'的区别
- 如何在Vim注释掉一个Python代码块
- python标准库中的装饰符(特别是@deprecated)
- 如何从外部访问本地Django web服务器
- 删除字符串的最后3个字符
- 在python中执行no-op的标准方法是什么?