2022年 11月 3日

python断言

断言

Python也提供了断言,但是我们很少使用。因为断言是出于调试目的的一种手段,而python中可供调试的手段实际上非常多。而且python还内置了unittest模块来提供完成单元测试。例如:

a = 1
assert a,'error'
a += 1
print(a)
  • 1
  • 2
  • 3
  • 4

断言的作用是判断a是否为真,如果不为真,那么python就会引发异常。data项将称为异常构造函数的参数。当然,如果不捕获assert异常,那么将会导致程序中断。例如:

a = 0
assert a,'error'
a += 1
print(a)
  • 1
  • 2
  • 3
  • 4

直接执行,将会导致程序中断,抛出AssertionError异常。但是你可以使用下面的方式来使断言失效。

python3 -O 断言.py
  • 1

这是因为断言是一种调试手段,实际上相当于:

a = 0
if __debug__:
    if not a:
        raise AssertionError('error')
a += 1
print(a)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

而-O参数相当于C/C++里的release版本一样,它将优化版本,跳过断言检查。
__debug__是内置标识符。

另外需要注意的是python中的断言,是不允许由赋值等操作的,避免了C/C++中断言的副作用。