笔记更新于2019年12月4日,
摘要:各种调试方法介绍assert、logging、调试器pdb;单元测试unittest的编写方法、如何运行单元测试;文档测试doctest的编写
写在前面:为了更好的学习python,博主记录下自己的学习路程。本学习笔记基于廖雪峰的Python教程,如有侵权,请告知删除。欢迎与博主一起学习Pythonヽ( ̄▽ ̄)ノ
目录
调试与测试
调试
• 断言 assert
• logging
• 调试器 pdb
• pdb.set_trace( )
• IDE
单元测试 unittest
• 单元测试编写
• 单元测试方法
• 运行单元测试
• setUp( )和tearDown( )
文档测试 doctest
调试与测试
调试
程序编写的过程中会出现各种意想不到的bug,想要一次性写好并成功运行几乎不可能。我们需要知道在运行过程中哪些变量可能会出错,在编写过程中要有一套调试程序的手段来修复bug。下面介绍在Python中常见的调试手段。
最简单粗暴的方法是print,只要在把可能会出错的变量打印出来即可。
def fn(s):
n = s
print('>>> n = %d' % n)
return 10 / n
def main():
fn(0)
main()
>>> n = 0
Traceback (most recent call last):
...
ZeroDivisionError: division by zero
这样我们就能知道是n = 0导致的错误。这种方法有个很大的问题就是,在程序编写完之后会留下大量的垃圾信息,不好处理。
• 断言 assert
在上面凡是用到print的地方都可以用assert来代替。
assert后面加一个判断语句,该判断为正确时程序正常运行,反之出现错误,打印紧跟的字符串。
def fn(s):
n = s
assert n != 0, '>>> n = 0'
return 10 / n
def main():
fn(0)
main()
运行结果:
Traceback (most recent call last):
...
AssertionError: >>> n = 0
assert 即声明、断言n应该不等于0,但结果n等于0,则断言失败,抛出AssertionError错误,并打印出紧跟的字符串'>>> n = 0'。
相比print,assert可以通过-O参数来关闭,关闭之后所有的assert语句相当于pass。如把上面代码保存为err.py文件,在python解释器中运行:
python -O err.py
运行结果:
Traceback (most recent call last):
...
ZeroDivisionError: division by zero
可见assert被关闭了,解释器打印出了ZeroDivisionError而不是AssertionError。
• logging
logging也是可以把错误输出。
import logging
s = 0
n = s
logging.info('n = %d' % n)
print(10 / n)
运行之后发现出了ZeroDivisionError之外没有其他信息。这是因为logg