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

错误处理

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

文档测试

  • python官方文档文友一些示例代码
  • doctest可直接提取注释中的代码并执行测试
  • 运行py,啥问题没有,就说明示例代码写的没有问题
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值