错误处理
- 事先约定返回错误码
抛出错误
- 如果要抛出错误,首先可以根据需要,可以定义一个错误的类,选择好继承关系,然后选择用raise语句抛出一个错误实例
`# err_raise.py
class FooError(ValueError):
passdef foo(s):
n = int(s)
if n==0:
raise FooError(‘invalid value: %s’ % s)
return 10 / nfoo(‘0’)`
- 在函数中,经常需要打印错误,同时将错误抛出
raise
语句如果不带参数,就会把当前错误原样抛出。此外,except
中raise
一个error,还可以把一种类型的错误转化为另一种类型
try:
10 / 0
except ZeroDivisionError:
raise ValueError('input error!')
- 但是,决不应该把一个
IOError
转化成毫不相干的ValueError
单元测试
- 从
unittest.TestCase
继承 - 以
test
开头的方法就是测试方法,不以test开头的方法不被认为是测试方法,测试的时候不会被执行 - 对每一类测试都需要编写一个
test_xxx()
方法。由于unittest.TestCase提供了很多内置的条件判断,我们只需要调用这些方法就可以断言输出是否是我们期望的。最常用的断言就是assertEqual
- 另外一种重要的断言就是期待抛出指定类型的error
- 运行单元测试
- 最简单的运行方法是在
.py
文件中添加两行代码
- 最简单的运行方法是在
if __name__ == '__main__':
unittest.main()
* 这样就可以把测试文件当做正常的python脚本运行
* 另一种方式是在命令行通过参数`-m unittest`直接运行单元测试
* setUp与`tearDown`
* 这两个方法会分别在每调用一个测试方法的前后分别被执行
文档测试
- python 内置的“文档测试”doctest 模块可以直接提取注释中的代码并执行测试
- doctest 严格按照python 交互命令行的输入和输出来判断测试结果是否正确
- *