赞
踩
目录
2、带finally的子句异常处理(try&except&finally)
任何程序都可能会遇到运行出错的现象,异常是不可避免的,但是可以通过异常处理语句得到合理解决。针对程序异常出错问题,Python提供了一套完整的处理机制。
基本语法使用:
- try:
- 代码模块1 #执行代码模块1,如果正常直接结束,如果异常走except里的子代码
- except:
- 代码模块2
具体流程:
1、先执行try语句
2、执行代码模块1,如果代码模块1正确,忽略except和代码模块2,直接执行完毕
3、如果代码模块1发生了异常,则终止代码模块1的执行,走到except
4、except捕捉到异常信息,开始执行代码模块2
报错示例:
- Atom2 = 1 + Atom #Atom2 = 1+Atom
- print(Atom2) #打印Atom2的值 打印结果很明显会报错,因为我没有定义变量Atom
打印结果:NameError: name 'Atom' is not defined
因为我没有给Atom赋值,所以打印结果会报错,这时候我们就可以用到try&except来进行异常处理
- try: #先执行try,代码开始捕捉异常信息
- Atom2 = 1 + Atom #代码模块1,没有给Atom赋值直接计算Atom2 = 1 + Atom,因为再这里就捕获到了异常,所以就不在执行代码模块1里的内容,直接跳到except处
- print(Atom2)
- except: #上面捕获到错误信息了,开始执行except里的内容
- print("出错了,没有对Atom赋值") #打印:出错了,没有对Atom赋值
'运行
输出结果为:出错了,没有对Atom赋值
执行步骤:
1、看到有try,先执行try下的子代码
2、发现子代码中 Atom没有被定义,所以Atom2 = 1 + Atom会报错
3、except会捕获到上面的异常信息,然后开始执行 except下的子代码
4、最后打印:出错了,没有对Atom赋值
我们来看个正确的,看看会不会走到except里:
- try: #捕捉异常机制开始
- Atom2 = 1 + 2 #执行子代码:Atom2 = 1+2 这个没有问题
- print(Atom2) #打印结果为 3
- except: #因为try里的子代码模块正常没有报错,所以不会进入到except中
- print("出错了,没有对Atom赋值")
'运行
输出结果为:3
执行步骤:
1、看到有try,先执行try下的子代码
2、发现子代码中Atom2 = 1 + 2 没问题
3、然后打印1+2的结果,打印结果为 3
4、因为 try下的子代码模块运行正常,没有异常,所以不走except下的子代码
先看下finally的基本结构:
- try:
- 代码模块1 #执行代码模块1,如果正常直接结束,如果异常走except里的子代码
- except: #异常的情况下走到except的子代码中,如果try下子代码正常,将忽略except的子代码
- 代码模块2
- finally: #无论try下的子代码是否异常,都要运行finally的子代码
- 子代码模块3
执行步骤:
1、先执行try语句
2、执行代码模块1,如果代码模块1正确,忽略except和代码模块2,直接执行完毕
3、如果代码模块1发生了异常,则终止代码模块1的执行,走到except
4、except捕捉到异常信息,开始执行代码模块2
5、不管try下的子代码模块是否正确,都执行finally下的子代码
举个try正确的例子:
- try: #开始捕获异常
- Atom2 = 1 + 2 #Atom2 = 1 + 2代码正常
- print(Atom2) #打印结果3
- except: #因为try的子模块没有异常,所以不运行except下的子代码模块
- print("出错了,没有对Atom赋值")
- finally: #因为有finally,所以不关try下的子代码模块是否正确,都会运行finally下的子代码
- print("肯定执行我")#打印 肯定执行我
'运行
打印结果为:3
肯定执行我
执行步骤:
1、看到有try,先执行try下的子代码
2、发现子代码中Atom2 = 1 + 2 没问题
3、然后打印1+2的结果,打印结果为 3
4、因为 try下的子代码模块运行正常,没有异常,所以不走except下的子代码
5、但是有finally,所以不管try下的代码模块是否正常都会执行finally下的子代码模块
6、打印结果:肯定执行我
7、所以最后打印结果为:try下的Atom2的值 3 和finally下子代码打印的结果:肯定执行我
现在看下try下子代码模块异常的例子:
- try: #先执行try,代码开始捕捉异常信息
- Atom2 = 1 + Atom #代码模块1,没有给Atom赋值直接计算Atom2 = 1 + Atom,因为在这里就捕获到了异常,所以就不在执行代码模块1里的内容,直接跳到except处
- print(Atom2)
- except: #上面捕获到错误信息了,开始执行except里的内容
- print("出错了,没有对Atom赋值") #打印:出错了,没有对Atom赋值
- finally: #因为有finally,所以不关try下的子代码模块是否正确,都会运行finally下的子代码
- print("肯定执行我") #打印 肯定执行我
'运行
最后打印的结果为:出错了,没有对Atom赋值
肯定执行我
执行步骤:
1、看到有try,先执行try下的子代码
2、发现子代码中 Atom没有被定义,所以Atom2 = 1 + Atom会报错
3、except会捕获到上面的异常信息,然后开始执行 except下的子代码
4、最后打印:出错了,没有对Atom赋值
5、但是有finally,所以不管try下的代码模块是否正常都会执行finally下的子代码模块
6、打印结果:肯定执行我
7、所以最后打印结果为:except下打印的值:出错了,没有对Atom赋值 和 finally下子代码打印的结果:肯定执行我
这些就是基本的异常处理相关的内容,如果只是怕出错,没有必须要执行的代码,就可以用try&except来写,如果有不管是否出错,最后都必须要执行的情况,就需要再最后加上finally处理即可。
下图为公众号二维码,内容会同步发出,大家可以关注一起学习
这个是张狗子小哥哥的公众号,会分享一些平时的工作心得,可以关注看下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。