python学习之异常处理和单元测试
异常类和异常处理
异常和异常类:
程序编译通过后,并不意味着运行就能获得正确结果,可能由于编程时考虑不周或运行时出现一些特殊情况(除数为零,越界,文件不存在等),结果出现中断程序正常运行,导致程序中断运行的错误称为异常(exception)又称例外。
异常是一个事件,该事件会在程序执行过程中发生,影响程序的正常执行,在python无法处理程序时就会产生异常,发生异常要捕获否则终止执行程序。
常用异常类:
异常处理:
异常处理的格式:
|
try子句:包含可能抛出异常的语句块
except子句:负责处理抛出的异常,处理的尝试顺序与多个except子句的编写顺序一致。当尝试发现第一个异常类型匹配的except子句时就执行其后的语句块。最后一个不指定异常类型的except子句匹配任何类型的异常。
else子句:当try子句中的语句块没有发生异常时执行,可选。
finally子句:无论是否抛出异常只要finally子句存在就会被最终执行。
try-except-else-finally语句的执行情况分为以下两种:
- try子句中的语句块没有发生异常,在执行完try子句中的语句块后,直接执行else子句块中语句块,最后执行finally子句中的语句块
- try子句中的语句块发生异常,发生异常的类型将和except子句的异常类型进行匹配并执行其后的语句块,最后执行finally子句中的语句块。
except子句else子句finally子句语句块可以为用户输出异常消息或提示信息,异常信息可以通过异常对象的message成员给出,也可以根据用户需求给出。
列表索引异常:
|
处理不确定异常:
|
整除处理:
|
处理文件访问异常:
|
异常抛出:
在except子句、else子句、finally子句的语句块中还可以将异常抛出,提供给调用它的上一级处理。抛出异常有raise语句执行。
格式:raise[Exception [,args [,traceback]]] Exception为异常类型,args为用户提供的参数,可选。traceback跟踪异常对象,可选。
|
断言语句:
assert断言语句是一种在程序测试中比较常用的技术,常用于在程序的某个位置判断是否满足某个条件。assert语句格式:
|
其中express是结果为布尔值的表达式。arguments为参数,一般为错误提示信息,可选。assert断言语句的执行过程:如果expression的值为真,则程序忽略expression后面的参数,执行assert语句后面的语句;否则,assert语句触发异常。
上述表达式为真不抛出异常,表达式为假抛出异常
在程序测试中未发现错误后,将python源程序编译为字节码文件时可以用优化参数-o或-oo将assert语言从程序语句中删除
单元测试:
软件测试一般分为白盒测试和黑盒测试,对于业务比较复杂代码量大的软件白盒测试的难度较高,通常以黑盒测试为主,黑盒测试也称功能测试,通过测试来检测每一个功能能否正常使用。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要对软件界面和软件功能进行测试。单元测试是保证软件开发质量的基本方法,用于检验被测代码的一个很小的很明确的功能是否正确。一个单元测试判断某个特定函数的行为在各个情形下都符合要求,单元测试是最低级的测试活动。
python中用于进行单元测试的常用库是Unittest,其中最常用的是testcase类,其常用函数如下:
|