• python学习-7-异常 错误 调试 测试


    错误处理

    • 使用错误代码 代指 错误类型
      • 正常结果与错误码混合在一起,容易混淆
        • 所以必须抛出错误类型
      • 一旦出错,还得一层层上报
    • 错误也是一个类,错误与错误之间也有者关系,例如父子关系
    • 需要对不同类型的错误进行识别与区分,并针对性的进行处理
    • python的错误是class,所有的 都继承自 BaseException
    try:
        foo()
    except ValueError as e:
        ssss
    except xxxx:
        ssss
    finally:
        ssss
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 需要注意,如果代码捕获的错误有父子关系,子在前,父在后,防止提前被捕获
    • try-except的好处在于 可以跨越多层捕获,只要main捕获到就ok
    • 若未被捕获,则会一直往上抛,直到被python解释器捕获,最终打印出来
      • 打印的顺序是从高往低
      • 最终可以定位到错误语句
      • python解释器打印错误信息,会将程序中止
    • python内置的logging模块可以很容易的记录错误信息
      • logging也可以将错误信息记录到日志文件中
    # 打印错误信息,与python解释器输出一样,但不会中止程序
    import logging
    logging.exception(e)
    
    • 1
    • 2
    • 3
    • 有的时候,我们捕获了错误,但是不知道如何处理,可以先打印信息,然后继续raise(不带参数)抛出

    调试

    • print (low)
    • 断言
      • eg:assert n!=0, 'n is zero'
      • n必须为0,否则抛出AssertionError: n is zero
      • python解释器可以用 -0 参数关闭assert,之后就相当于pass
    • logging
      • 使用logging代替print,打印变量的值
      • logging.basicConfig(level=logging.INFO) 定义日志等级
      • debug,info,warning,error,靠右原则,info时debug失效
    • pdb
      • python解释器的debug
    • ide的端点debug

    单元测试

    • 对一个模块/函数/类进行正确性检验的测试工作
    • 把测试用例放到一个测试模块中,就是一个完整的单元测试
    • 使用
      • 编写一个测试类,继承unittest.TestCase
      • 每一类测试都写一个test_xxx()方法(严格规范)
      • 最常用的是self.assertEqual(方法,期待值)
      • 期待抛出的指定类型的Error
      # 当d['empty']访问不存在的key时,断言就会抛出KeyError
      with self.assertRaises('KeyError'):
          value = d['empty']
      
      • 1
      • 2
      • 3
    • 直接运行脚本就ok,批量运行多个单元测试
    • setUp与tearDown方法
      • 在每个单元测试前后执行
      • 例如连接数据库,关闭数据库

    文档测试

    • python官方文档文友一些示例代码
    • doctest可直接提取注释中的代码并执行测试
    • 运行py,啥问题没有,就说明示例代码写的没有问题
  • 相关阅读:
    Maven 仓库地址
    微信小程序关键词排名优化:提升你的小程序可见性
    安装python中wordcloud的几种方法
    c语言强制类型转换
    从React源码分析看useEffect
    始祖双碳新闻 | 2022年8月1号-8月5号碳中和行业早知道
    jQuery常用API--元素操作
    框架 Wrapper 条件构造器 2022-8-3 接昨天的
    Mysql锁
    十八张图带你入门实时监控系统HertzBeat
  • 原文地址:https://blog.csdn.net/qq_34687559/article/details/125570386