zoukankan      html  css  js  c++  java
  • 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,不是用于处理运行时错误的机制。

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

  • 相关阅读:
    spark SQL之 DataFrame和DataSet
    scala之 保留小数
    spark之 避免数据倾斜之 给名字分区(百家姓)
    hive之 'client_protocol' is unset!
    hive之报错:ls:cannot access '/usr/local/spark/lib/spark-assembly-*.jar':No such file or directory
    hive之 Error: Duplicate key name 'PCS_STATS_IDX' (state=42000,code=1061) ----Hive schematool -initSchema
    Maven中需要注意的点
    spark之 Idea操作
    scala之 一句话打印三角形
    scala 之 BaseDao
  • 原文地址:https://www.cnblogs.com/xiebinbbb/p/13935491.html
Copyright © 2011-2022 走看看