聊聊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 相关文章推荐
使用Python3中的gettext模块翻译Python源码以支持多语言
Mar 31 Python
搞笑的程序猿:看看你是哪种Python程序员
Jun 12 Python
Python中函数的参数传递与可变长参数介绍
Jun 30 Python
python中的字典使用分享
Jul 31 Python
python 3利用BeautifulSoup抓取div标签的方法示例
May 28 Python
python画出三角形外接圆和内切圆的方法
Jan 25 Python
浅谈Python中(&amp;,|)和(and,or)之间的区别
Aug 07 Python
python 图像处理画一个正弦函数代码实例
Sep 10 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 Python
Python字典和列表性能之间的比较
Jun 07 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 flush类输出缓冲剖析
2008/10/19 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
PHP单链表的实现代码
2016/07/05 PHP
jquery操作cookie插件分享
2014/01/14 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
js图片轮播效果实现代码
2020/04/18 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
jQuery EasyUI 获取tabs的实例解析
2016/12/06 Javascript
ES5 ES6中Array对象去除重复项的方法总结
2017/04/27 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
2020/01/07 Javascript
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
js轮播图之旋转木马效果
2020/10/13 Javascript
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
Django框架中序列化和反序列化的例子
2019/08/06 Python
python 字典访问的三种方法小结
2019/12/05 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
Michael Kors加拿大官网:购买设计师手袋、手表、鞋子、服装等
2019/03/16 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
学生个人求职自荐信格式
2013/09/23 职场文书
个人简历自我评价
2014/02/02 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
授权收款委托书
2014/09/23 职场文书
单位个人查摆问题及整改措施
2014/10/28 职场文书
高三英语教学计划
2015/01/23 职场文书
2015年宣传工作总结
2015/04/08 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
环保建议书作文500字
2015/09/14 职场文书
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis