2.15.3 assert

在上一节中,我们举了一个如下简单的例子。


if student_info['age'] < 6:
    raise AssertionError('The minimal age of a student is 6')

在实际编程中,断言的主要应用场景是确认系统逻辑状态的正确性,并不参与业务逻辑的处理。所以,如果断言的代码语句能尽可能简洁的话,对正常的业务逻辑代码的干扰就更小,代码的可读性就可以更高。

使用assert关键字,我们可以用更简洁的代码实现断言检查。在assert语句后接期望的正常状态的逻辑表达式,如果这个逻辑表达式的结果为True,程序继续执行;如果结果为False,则有AssertionError断言错误被抛出。


assert student_info['age'] >= 6

执行结果如下:


Traceback (most recent call last):
  File "/Users/mxu/Workspace/codes/assertion_demo.py", line 7, in <module>
    assert student_info['age'] >= 6
AssertionError

任何逻辑判断表达式都可以用于assert语句。比如,断定condition_2应该为True,如果不是这样,就抛出一个断言错误。


assert condition_2

断定condition_3不应该为True,如果它为True,那就抛出一个断言错误。


assert not condition_3

在写assert表达式的时候,在逻辑判断表达式之后,我们可以加上相应的描述信息。描述信息部分在语法上不是必需的,但是我们尽量不要省略,因为在错误排查的时候,这样的信息是非常有帮助的。


assert student_info['age'] >= 6, 'Minimal age of a student is 6'

执行结果如下:


Traceback (most recent call last):
  File "/Users/mxu/Workspace/codes/assertion_demo.py", line 7, in <module>
    assert student_info['age'] >= 6, 'Minimal age of a student is 6'
AssertionError: Minimal age of a student is 6

在软件程序中,断言表达式可看作是一种更为强大的代码注释,因为它不仅澄清了我们期望的程序状态,而且Python解释器还可以帮助我们检查这样的期望状态。在自动化测试代码中,断言表达式更是有着核心的地位(后续章节会介绍),需要我们好好掌握。