0.前言
如果可以的话,请先关注(专栏和账号),然后点赞和收藏,最后学习和进步。你的支持是我继续写下去的最大动力,个人定当倾囊而送,不负众望。谢谢!!!
1.前提
基于win10专业版64位系统+64位jdk1.8+64位python3.6.5+社区版pycharm2018.1.3+unittest+selenium3.141.0。
要学好自动化测试,我们先从python语言基础开始学习,一步一个脚印,欲速则不达哦!
2.异常捕获结构的几个关键字
前面用到了两个关键字,分别是try和excetp,下面我们来看一个完整的异常捕获结构:
print('0000000')
try:#认为可能会出错的代码放在try子句中
print('1111111')
print(2/0)
except Exception as e:#捕获到异常时才会执行
print('2222222')
else:#没有异常时才会执行
print('3333333')
finally:#无论有没有异常都会执行
print('4444444')
print('5555555')
# 运行结果:
0000000
1111111
2222222
4444444
5555555
根据代码中的运行逻辑注释信息,相信大家不难得出运行结果吧!
总结:
1.except语句不是必须的,finally语句也不是必须的,但是二者必须要有一个,否则就没有try的意义了。
2.except语句可以有多个,Python会按except语句的顺序依次匹配你指定的异常,如果异常已经处理就不会再进入后面的except语句。
3.except语句可以以元组形式同时指定多个异常。
4.except语句后面如果不指定异常类型,则默认捕获所有异常,你可以通过sys模块获取当前异常。
5.如果要捕获异常后要重新抛出,请使用raise,后面不要带任何参数或信息。
6.不建议捕获并抛出同一个异常,请考虑重构你的代码。
7.不建议在不清楚逻辑的情况下捕获所有异常,有可能你隐藏了很严重的问题。
3.自定义异常
#实现循环打印1~10,如果为5是抛出异常,直接结束运行
for i in range(1,11):
if i == 5:
raise NameError("自定义异常!")
else:
print(i)
运行结果:
如果想要抛出异常后继续打印后面的数字,该怎么办呢?方式有很多,黑猫白猫能抓老鼠的都是好猫,作为初学者我们首先以功能实现为目的,暂时不用过多考虑代码的优雅性、行数和效率等。秉持学以致用的原则,我们把前面学的异常捕获结果加上来实现下。
for i in range(1,11):
if i == 5:
try:
raise NameError("自定义异常!")
except Exception as e:
print(e)
else:
print(i)
# 运行结果:
1
2
3
4
自定义异常!
6
7
8
9
10
最后,我想说的是,自定义异常其实并不是程序本身的异常,而是我们为了实现某种情况,比如条件满足时主动产生一个异常来达到一定的运行效果。更具体一点,比如:自动化测试生成的html报告,想要正确统计基于unittest框架写的测试用例执行结果的话,要么使用框架自带的断言功能,要么使用异常捕获结构,在捕获到异常时并主动抛出一个异常才能在测试报告中正确统计用例执行结果。这里大家可能还不是很明白,没关系的,随着学习的深入,大家终究会明白的哦,加油!(此段话可选择性忽略)