聊聊python中的异常嵌套


Posted in Python onSeptember 01, 2020

在Python中,异常也可以嵌套,当内层代码出现异常时,指定异常类型与实际类型不符时,则向外传,如果与外面的指定类型符合,则异常被处理,直至最外层,运用默认处理方法进行处理,即停止程序,并抛出异常信息。如下代码:

try:
 try:
  raise IndexError
 except TypeError:
  print('get handled')
except SyntaxError:
 print('ok')

运行程序:

Traceback (most recent call last):
File "<pyshell#47>", line 3, in <module>
raise IndexError
IndexError


再看另一个被外层try-except捕获的例子:

try:
 try:
  1/0
 finally:
  print('finally')
except:
 print('ok')

运行:

finally
ok

这里值得注意的是except:可以捕获所有的异常,但实际上这样做也有缺点,即有时候会包住预定的异常。


另外,需要提到的是raise A from B,将一个异常与另一个异常关联起来,如果from后面的B没有被外层捕获,那么A,B异常都将抛出,例如:

try:
 1/0
except Exception as E:
 raise TypeError('bad') from E

运行:

Traceback (most recent call last):
File "<pyshell#4>", line 2, in <module>
1/0
ZeroDivisionError: division by zero

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "<pyshell#4>", line 4, in <module>
raise TypeError('bad') from E
TypeError: bad

相反,如果外层捕获了B:

try:
 try:
  1/0
 except Exception as E:
  raise TypeError from E
except TypeError:
 print('no'

运行:

no


最后,再看看try-finally在嵌套中的表现。

try:
 try:
  1/0
 finally:
  print('finally')
except:
 print('ok')

运行:

finally
ok

不管有没有异常发生,或者其是否被处理,finally的代码都要执行,如果异常被处理,则停止,如果没有被处理,向外走,直至最终没处理,采用默认方法处理,上例中,异常在最外层被处理。

try:
 try:
  1/0
 except Exception as E:
  print('happens')
 finally:
  print('finally')
except E:
 print('get handled')

运行:

happens
finally

异常在内部被处理,不再向外传播。

以上就是聊聊python中的异常嵌套的详细内容,更多关于python 异常嵌套的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中运行并行任务技巧
Feb 26 Python
极简的Python入门指引
Apr 01 Python
Python中的字典与成员运算符初步探究
Oct 13 Python
利用python求相邻数的方法示例
Aug 18 Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
pyqt5与matplotlib的完美结合实例
Jun 21 Python
基于Pytorch SSD模型分析
Feb 18 Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 Python
Python基于class()实现面向对象原理详解
Mar 26 Python
requests在python中发送请求的实例讲解
Feb 17 Python
Python各协议下socket黏包问题原理
Apr 12 Python
理解Django 中Call Stack机制的小Demo
Sep 01 #Python
如何快速理解python的垃圾回收机制
Sep 01 #Python
Python Opencv图像处理基本操作代码详解
Aug 31 #Python
Python Matplotlib绘图基础知识代码解析
Aug 31 #Python
一些关于python 装饰器的个人理解
Aug 31 #Python
Python常用模块函数代码汇总解析
Aug 31 #Python
PyTorch 导数应用的使用教程
Aug 31 #Python
You might like
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
jquery实现按Enter键触发事件示例
2013/09/10 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
NodeJS制作爬虫全过程
2014/12/22 NodeJs
jquery实现点击页面计算点击次数
2015/01/23 Javascript
JS点击链接后慢慢展开隐藏着图片的方法
2015/02/17 Javascript
nodejs爬虫抓取数据之编码问题
2015/07/03 NodeJs
前端程序员必须知道的高性能Javascript知识
2016/08/24 Javascript
js判断所有表单项不为空则提交表单的实现方法
2016/09/09 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
2017/04/05 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
Python模块学习 filecmp 文件比较
2012/08/27 Python
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
利用Python如何生成随机密码
2016/04/20 Python
python中import reload __import__的区别详解
2017/10/16 Python
详解Python中的正则表达式
2018/07/08 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
详解python之heapq模块及排序操作
2019/04/04 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
css3背景_动力节点Java学院整理
2017/07/11 HTML / CSS
行政人员工作职责
2013/12/05 职场文书
主管会计岗位职责
2014/03/13 职场文书
2014政府领导班子对照检查材料思想汇报(3篇)
2014/09/26 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
教师调动申请报告
2015/05/18 职场文书
团队拓展训练感想
2015/08/07 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
python编程实现清理微信重复缓存文件
2021/11/01 Python
Pygame如何使用精灵和碰撞检测
2021/11/17 Python
CPU不支持Windows11系统怎么办
2021/11/21 数码科技
Python Pygame实战之塔防游戏的实现
2022/03/17 Python