聊聊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中为什么要用self探讨
Apr 14 Python
Python使用当前时间、随机数产生一个唯一数字的方法
Sep 18 Python
python和flask中返回JSON数据的方法
Mar 26 Python
Pandas中把dataframe转成array的方法
Apr 13 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
Python3实现汉语转换为汉语拼音
Jul 08 Python
pandas数据处理进阶详解
Oct 11 Python
3种python调用其他脚本的方法
Jan 06 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
Python3 用什么IDE开发工具比较好
Nov 28 Python
Django cookie和session的应用场景及如何使用
Apr 29 Python
深入浅析Django MTV模式
Sep 04 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快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
PHP 调试工具Debug Tools
2011/04/30 PHP
Symfony2学习笔记之控制器用法详解
2016/03/17 PHP
javascript定义函数的方法
2010/12/06 Javascript
jquery下checked取值问题的解决方法
2012/08/09 Javascript
防止浏览器记住用户名及密码的简单实用方法
2013/04/22 Javascript
多个jquery.datatable共存,checkbox全选异常的快速解决方法
2013/12/10 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
javascript实现带下拉子菜单的导航菜单效果
2015/05/14 Javascript
JavaScript编写页面半透明遮罩效果的简单示例
2016/05/09 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
原生js实现焦点轮播图效果
2017/01/12 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
React组件refs的使用详解
2018/02/09 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
jQuery+koa2实现简单的Ajax请求的示例
2018/03/06 jQuery
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
Vue中props的详解
2019/05/16 Javascript
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
35个Python编程小技巧
2014/04/01 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
什么是Python包的循环导入
2020/09/08 Python
AT&T Wireless:手机、无限数据计划和配件
2018/06/03 全球购物
小学生美德少年事迹材料
2014/08/24 职场文书
孔繁森观后感
2015/06/10 职场文书
让世界充满爱观后感
2015/06/10 职场文书
如何做好工作总结!
2019/04/10 职场文书
员工试用期工作总结
2019/06/20 职场文书