错误、调试和测试
错误处理
Python内置了一套try...except...finally
的错误处理机制:
和java中一样,try后面的是我们认为可能会出错的代码块,如果代码块某一行执行出错,则从该行代码后的都不会继续执行,直接跳到错误处理的代码块,即except语句块(可以有多个),执行完此语句块后,如果有finally语句块,则执行finally语句块。也就是finally语句块一定会执行。
Python的错误是class,具有继承关系,except不但捕获该类型的错误,也将其 子类的错误 也一网打尽。
如果程序没有被捕获,它就会一直往上抛(调用堆栈),最后被Python解释器捕获,打印错误信息(在错误堆栈中),然后 程序退出。
记录错误
我们可以捕获错误(使用try...except
),打印出错误信息,同时最重要的是让程序继续执行下去。
Python使用logging
模块,记录错误信息.
抛出错误
使用raise
语句抛出一个错误实例。 首先要定义一个错误的class,选择好继承关系,然后使用raise
语句抛出一个错误的实例:
调试程序
- 第一种方法,使用
print()
将可能出现问题的点或者可能有问题的变量打印出来 第二种方法,使用断言
assert
替代print()
1234def foo(s):n=int(s)assert n!=0, 'n is zero!' #断言表示的意思是,n!=0应该是true,否则后面会执行出错误,如果断言失败,该语句抛出AssertionError错误return 100/n第三种方法,使用
logging
替换print()
:
|
|
- 使用Python的调试器pdb,程序以单步方式运行。
使用命令python -m pdb TestPython.py
启动,输入字母 l 查看代码,字母 n 单步执行,输入p 变量名
来查看变量的值,命令 q 退出pdb调试。
可以使用pdb.set_trace()
设置断点。
|
|
- 使用IDE,如 pycharm,比较方便设置断点、单步执行,比较方便进行调试。
单元测试
单元测试是用来对一个模块、一个函数或者一个类来进行正确性检验的测试工作,类似于“测试驱动开发”(TDD:Test-Driven Development)的方法。
以测试为驱动的开发模式,最大的好处是确保一个程序模块的行为符合我们设计的测试用例,将来修改的时候,可以极大程度的保证该模块的行为仍然是正确的。
例如我们新建一个MyDict类,这个类的行为和dic一致:
|
|
编写单元测试,引入unittest模块,编写测试脚本(可以一次批量允许多个单元测试):
|
|
文档测试(doctest)
Python内置的“文档测试”(doctest)模块可以直接提取注释中的代码并执行测试。
|
|