python中的断言

python中的断言是一种调试工具,用来测试某一个断言条件。如果断言条件为真,则程序将继续正常执行,但是如果条件为假,那么就会引发AssertionError异常并且显示相关的错误信息。

使用断言来自动检测程序中的错误,让程序更可靠以及更易于调试。

断言举例

下面假设要用python构建在线商店,为了添加打折优惠券的功能,编写了下面这个apply_discount函数:

里面中的assert语句就是确保在任何情况下,通过该函数计算的折后价不低于0,也不会高于产品原价。

1 def apply_discount(product, discount):
2     price = int(product['price'] * (1.0 - discount))
3     assert 0 <= price <= product['price']
4     return price
shoes = {'name': 'Fancy Shoes', 'price': 14900}

price = apply_discount(shoes, 0.25)
print(price)

11175

上面的例子正常运行,可以计算出打折后的价格,如果discount=2时,会出现什么结果呢?

shoes = {'name': 'Fancy Shoes', 'price': 14900}

price = apply_discount(shoes, 2)
print(price)

输出结果如下:

1 Traceback (most recent call last):
2   File "C:/Desktop/test/main.py", line 9, in <module>
3     price = apply_discount(shoes, 2)
4   File "C:/Desktop/test/main.py", line 3, in apply_discount
5     assert 0 <= price <= product['price']
6 AssertionError

可以看到触发了AssertionError.因为此时违反了函数中设置的断言条件

断言可以极大的加快调试工作的速度,并且从长远看来,程序也更加容易维护。

Python的断言语法

python的断言语法如下:

1 assert_stmt ::= "assert" expression1 ["," expression2]

其中,expression1是需要测试的条件,可选的expression2是错误消息,如果断言失败那么就显示该消息。在执行的时候,python解释器将每条断言语句大致转换成以下这些语句:

1 if __debug__:
2     if not expression1:
3         raise AssertionError(expression2)

这段代码有下面两个特征:

  • 代码在检查断言条件之前,还会检查__debug__全局变量。这是一个内置的布尔标记,在一般情况下为真,若进行代码优化则为假。
  • 还可以用expression2传递一个可选的错误消息,该消息将与回溯中的AssertionError一起显示,用来进一步简化调试。

断言总结:

Python断言语句是一种测试某个条件的调试辅助功能,可以作为程序的内部自检。

断言应该只用于帮助开发人员识别bug,不是用于处理运行时错误的机制。

设置解释器可以全局禁用断言。

原文地址:https://www.cnblogs.com/xiebinbbb/p/13935491.html