• 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,不是用于处理运行时错误的机制。

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

  • 相关阅读:
    FineUI 单击菜单页面内容完全刷新,关闭Tab
    FineUI秘密花园(九) — 表单验证
    FineUI 选中多行获取行ID
    NPOI控制Excel格式
    ”那个人样子好怪。” “我也看到了,他好像一条狗。”
    投资条件
    setContentView+LayoutInflater=完美切换页面(两者一定要同时使用,setContentView提高切换页面速度必看)setContentView的秘密----续上
    设置PlaceHolder的颜色
    android 数据库
    行动,行动,再行动
  • 原文地址:https://www.cnblogs.com/xiebinbbb/p/13935491.html
Copyright © 2020-2023  润新知