一、python异常处理的几个关键字:try、except、finally、raise
1、try-except(多个except)-else-finally可组成一套异常处理,else会在程序中的try正常执行时运行,finally无论程序是否正确运行,最后都会执行finally:
# _*_ coding:utf-8 _*_
def div(a,b):
try:
print(a/b)
except ZeroDivisionError:
print('b不能为0')
else:
print('执行成功')
finally:
print('执行完成')
print('先执行try,遇到异常抛出,跳过else执行finally:')
div(1,0)
print('---------')
print('正常执行没有异常时会执行else,最后执行finally:')
div(1,1)
结果:
D:\Python27\python.exe
先执行try,遇到异常抛出,跳过else执行finally:
b不能为0
执行完成
---------
正常执行没有异常时会执行else,最后执行finally:
1
执行成功
执行完成
Process finished with exit code 0
2、raise用于程序自动引发异常,自定义异常,且raise后的程序不会执行
def div(a,b):
if b==0:
raise ZeroDivisionError('b不能为0')
#raise后面的语句不会执行
print(a/b)
(1)调用函数-引发异常:
try:
div(1,0)
except Exception as e:
print(e)
结果输出:b不能为0
(2)调用函数-没有异常
try:
div(1,1)
except Exception as e:
print(e)
结果输出:1
二、断言处理:assert
用于检查必须为真的条件,如条件为假,则终止程序
def fun():
assert 1 + 1 == 2, 'error'
#如果assert语句中条件为真,则执行print语句,否则不执行
print('testing')
fun()
正确执行时输出:testing
将断言改为1+1==3,运行结果为:
D:\Python27\python.exe
Traceback (most recent call last):
File "E:/testpro/testadd.py", line 33, in <module>
fun()
File "E:/testpro/testadd.py", line 30, in fun
assert 1 + 1 == 3, 'error'
AssertionError: error
Process finished with exit code 1
三、unittest框架的TestCase类提供特定的断言方法:
assertEqual(a,b,[msg='测试失败时打印的信息']): 断言a和b是否相等,相等则测试用例通过。
assertNotEqual(a,b,[msg='测试失败时打印的信息']): 断言a和b是否相等,不相等则测试用例通过。
assertTrue(x,[msg='测试失败时打印的信息']): 断言x是否True,是True则测试用例通过。
assertFalse(x,[msg='测试失败时打印的信息']): 断言x是否False,是False则测试用例通过。
assertIs(a,b,[msg='测试失败时打印的信息']): 断言a是否是b,是则测试用例通过。
assertNotIs(a,b,[msg='测试失败时打印的信息']): 断言a是否是b,不是则测试用例通过。
assertIsNone(x,[msg='测试失败时打印的信息']): 断言x是否None,是None则测试用例通过。
assertIsNotNone(x,[msg='测试失败时打印的信息']): 断言x是否None,不是None则测试用例通过。
assertIn(a,b,[msg='测试失败时打印的信息']): 断言a是否在b中,在b中则测试用例通过。
assertNotIn(a,b,[msg='测试失败时打印的信息']): 断言a是否在b中,不在b中则测试用例通过。
assertIsInstance(a,b,[msg='测试失败时打印的信息']): 断言a是是b的一个实例,是则测试用例通过。
assertNotIsInstance(a,b,[msg='测试失败时打印的信息']): 断言a是是b的一个实例,不是则测试用例通过。