聊聊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 Web框架Pylons中使用MongoDB的例子
Dec 03 Python
Python入门篇之字典
Oct 17 Python
Python采用Django制作简易的知乎日报API
Aug 03 Python
python 按照固定长度分割字符串的方法小结
Apr 30 Python
Python数据集切分实例
Dec 08 Python
对json字符串与python字符串的不同之处详解
Dec 19 Python
Python使用sklearn实现的各种回归算法示例
Jul 04 Python
Pytorch 多维数组运算过程的索引处理方式
Dec 27 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
python实现b站直播自动发送弹幕功能
Feb 20 Python
AI:如何训练机器学习的模型
Apr 16 Python
python实现三阶魔方还原的示例代码
Apr 28 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
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
2012/09/07 PHP
浅谈php的优缺点
2015/07/14 PHP
Javascript 数组排序详解
2014/10/22 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
关于JS变量和作用域详解
2016/07/28 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
2017/06/17 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
JavaScript原型对象原理与应用分析
2018/12/27 Javascript
LayUI switch 开关监听 获取属性值、更改状态的方法
2019/09/21 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
Python去除列表中重复元素的方法
2015/03/20 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
python基于ID3思想的决策树
2018/01/03 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
python实现Zabbix-API监控
2018/09/17 Python
Python实现验证码识别
2020/06/15 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
使用HTML5做个画图板的方法介绍
2013/05/03 HTML / CSS
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
C++面试题目
2013/06/25 面试题
市场部业务员岗位职责
2014/04/02 职场文书
北京故宫导游词
2015/01/31 职场文书
工程项目合作意向书
2015/05/08 职场文书
单位工作证明范本
2015/06/15 职场文书
小学记事作文之200字
2019/08/06 职场文书
MySQL锁机制
2021/04/05 MySQL
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis
MySQL创建表操作命令分享
2022/03/25 MySQL
使用python绘制分组对比柱状图
2022/04/21 Python