编写程序时,在调试的时候,有的时候需要知道代码执行过程中的值,如对象是否为空,数值是否正确等,这时候一般使用print()打印中间结果,或者使用断点跟踪调试查看变量,但是其实使用assert断言更灵活高效。
断言assert是指期望用户指定的条件满足,它是当用户定义的约束条件不满足时触发AssertionError异常,因此 assert语句可以视为条件式的 raise语句。它的主要功能是帮助程序员调试程序,从而保证程序运行的准确性,一般在开发调试阶段使用。
语句形式:
assert<布尔表达式>
assert,
其中 是一个布尔表达式,是字符串表达式,也就是断言失败时输出的失败消息,如果布尔表达式的值为 False时,就会抛出AssertionError异常。执行效果类似:
if not :
raise AssertionError()
Python解释器有两种运行模式,调试模式和优化模式。一般为调试模式,内置只读变量_debug_为True。使用选项-O运行时,即python.exe -O为优化模式,此时内置只读变量_debug_为 False。
示例:
x=int(input("请输入一个整数作为被除数:"))
y=int(input("请输入一个整数作为除数:"))
assert y!=0,'除数不能为0.'
z=x/y
print(x,'/',y,'=',z)
程序运行结果:
C:\Users\dell>py -3 D:\youyou_program\Python\assert.py
请输入一个整数作为被除数:5
请输入一个整数作为除数:0
Traceback (most recent call last):
File "D:\youyou_program\Python\assert.py", line 3, in
assert y!=0,'除数不能为0.'
AssertionError: 除数不能为0.
启用、禁用断言
一般 Python 运行再调试模式,程序中的断言语句可以帮助程序调试,在正式运行时,加上 -O 选项,以优化模式允许来禁用断言,从而提高程序效率。例如使用上面这个例子实验:
C:\Users\dell>py -3 D:\youyou_program\Python\assert.py
请输入一个整数作为被除数:5
请输入一个整数作为除数:0
Traceback (most recent call last):
File "D:\youyou_program\Python\assert.py", line 3, in
assert y!=0,'除数不能为0.'
AssertionError: 除数不能为0.
C:\Users\dell>py -3 -O D:\youyou_program\Python\assert.py
请输入一个整数作为被除数:5
请输入一个整数作为除数:0
Traceback (most recent call last):
File "D:\youyou_program\Python\assert.py", line 4, in
z=x/y
ZeroDivisionError: division by zero