Python 断言是什么以及如何进行断言
断言是在单元测试中执行的(通常在软件开发过程中),用于检查代码是否按预期执行。它们是布尔表达式;当为真时,什么都不发生,但当为假时,程序终止并引发异常。
它简单地被定义为一个健全性测试。这是一种声明条件基本上不可能出现的方式。程序员通常在程序开始处放置断言来检查有效输入;或检查条件,如“a大于b”或“获得的返回值是一个字符串”等。
断言主要用于调试。它们将帮助您确保在为代码添加功能或纠正现有错误时不会引入新问题。
语法
使用 assert 关键字声明断言,后跟要检查的条件。语法如下:
assert expression[, assertion_message]
这里, expression 是任何有效的Python表达式(包括对象);而 assertion_message 参数是可选的,并接受一个包含关于所要进行的断言类型的消息的字符串。
常见的断言格式
Python程序中有各种断言格式。了解这些格式将帮助您编写更强大的断言。常见的断言样式如下所示:
- 比较断言
-
成员关系断言
-
身份断言
-
类型检查断言
比较断言
比较断言用于测试使用比较运算符比较两个或多个对象的条件。这些断言中还可以使用基于布尔运算符的复合表达式。
示例
让我们看一个演示比较断言的示例。在这里,while循环会一直执行,直到断言条件返回一个false值。
while True:
x = int(input("Enter an integer: "))
y = 6
assert x > y
print("x is greater than y")
输出
如果我们执行以上程序,输出结果如下所示:
Enter an integer: 8
x is greater than y
Enter an integer: 2
Traceback (most recent call last):
File "main.py", line 5, in <module>
assert x > y
AssertionError
会员资格断言
会员资格断言允许您确定给定项目是否存在于给定的集合中,例如列表、元组、集合、字典等。这些断言使用in和not in的成员运算符进行必要的检查。
我们将通过一个示例来展示会员资格断言的用法。在这里,我们正在考虑一个编号列表,并检查给定的整数是否是列表的一部分。如果为假,程序将引发一个AssertionError并终止。
示例
# Membership assertions
numbers = [1, 2, 3, 4, 5]
assert 4 in numbers
print("4 is a part of the list")
assert 10 in numbers
print("10 is a part of the list")
输出结果
上述程序的输出如下。4是列表的一部分,因此执行了print()语句,但是10不是列表的一部分,因此程序终止。
4 is a part of the list
Traceback (most recent call last):
File "main.py", line 5, in
assert 10 in numbers
AssertionError
身份断言
身份断言允许您测试项目的身份。在此断言语法中使用的身份运算符 是 和 不是 。
让我们来看一个演示身份断言的示例。
# Identity assertion
x = 1
y = x
assert x is y
print("x is equal to y")
assert x is not y
print("x is not equal to y")
输出
上述程序的输出如下:
x is equal to y
Traceback (most recent call last):
File "main.py", line 6, in <module>
assert x is not y
AssertionError
类型检查断言
类型检查断言通常涉及使用内置的isinstance()函数来确保给定的对象是特定类或类的实例。
可以通过以下示例更好地理解类型检查断言。
示例
# Type check assertions
number = 671537
assert isinstance(number, int)
print("The number is an integer")
string = "hello"
assert isinstance(string, str)
print("The value is a string")
flt = "a"
assert isinstance(flt, float)
print("The number is a float value")
输出
执行上面的程序后,输出如下:
The number is an integer
The value is a string
Traceback (most recent call last):
File "main.py", line 9, in <module>
assert isinstance(flt, float)
AssertionError
结论
在评估的背景下,断言就像一个健全检查,用于确定结果是真还是假。当表达式评估为假时,会抛出异常;否则,程序会继续执行。通过断言可以创建清晰、可维护的代码。此外,它还可以作为调试工具使用,通过抛出异常来防止错误的结果。编程不遵循try-catch模式。