10. Python基础学习笔记——错误和测试

错误、调试和测试

错误处理

  • 错误处理机制:try-except-finally
  • 当觉得某些代码可能会在运行时出现错误时,就可以使用try, except, finally包括起来
  • 可以使用多个except来捕获不同的错误类型
  • 可以在except后面添加else分支,当错误没有发生时,会执行else分支的语句。
  • 常见的错误类型及继承关系:https://docs.python.org/3/library/exceptions.html#exception-hierarchy
  • 只需要在合适的层次捕获错误即可。

调用堆栈

  • 错误如果未被捕获,它会一直上抛,直到Python解释器捕获

记录错误

  • 使用logging模块记录错误信息
  • 使用logging.exception(e)即可记录详细的错误日志

抛出错误

  • 使用raise可以抛出错误
  • 可以自己定义错误,选择相应的错误类继承即可。
  • 尽量使用内置的错误类型
  • 可以在捕获错误后继续往上抛出错误

调试

断言

  • 在程序中,但凡可以使用print()辅助查看的地方,都可以使用断言替代
  • assert n != 0, "message here..."
  • 可以在Python解释器加入-O参数忽略断言。python -O err.py

logging

  • 设定不同的level,那么对应不同级别的日志可以显示
  • 通过简单地配置,可以让日志同时输出到不同的地方。

单元测试

  • 测试驱动开发(TDD, Test-Driven Development)。
  • 单元测试是用来对一个模块,一个函数或者一个类进行正确性检验的测试工作
  • test开头的方法就是测试方法,否则不是测试方法,测试时候不会被执行。
  • 单元测试,需要编写一个类,并且从unittest.TestCase继承
  • 运行单元测试的方法:
  • 直接调用unittest.man()方法
  • 通过在命令行中添加-m unittest参数直接运行单元测试。这是一种推荐的方式。这样做可以一次批量运行很多单元测试,且有许多工具可以自动完成这些单元测试。
  • setUp()tearDown()方法如果在单元测试类中定义了,那么就会在运行单元测试的开始和结束分别调用

总结

  • 单元测试可以有效地测试某个模块的行为
  • 单元测试的测试用例要覆盖常用的输入组合、边界条件和异常
  • 单元测试代码尽可能简单,不应有bug

文档测试

  • 文档可以卸载注释中,然后由工具生成文档。
  • Python内置的文档测试doctest模块可以直接提取注释中的代码并执行测试
  • doctest不会在非测试环境中执行

问题

doctest.testmod()在Python3.4中似乎没有。。。

你可能感兴趣的:(10. Python基础学习笔记——错误和测试)