聊聊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 httplib,smtplib使用方法
Sep 06 Python
python比较两个列表大小的方法
Jul 11 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
基于DATAFRAME中元素的读取与修改方法
Jun 08 Python
python实现汉诺塔算法
Mar 01 Python
Python格式化输出字符串方法小结【%与format】
Oct 29 Python
神经网络相关之基础概念的讲解
Dec 29 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
使用python3 实现插入数据到mysql
Mar 02 Python
Django权限控制的使用
Jan 07 Python
pytorch 实现变分自动编码器的操作
May 24 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
js下函数般调用正则的方法附代码
2008/06/22 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
php while循环得到循环次数
2013/10/26 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
php输出控制函数和输出函数生成静态页面
2019/06/27 PHP
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
javascript类型转换示例
2014/04/29 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
JavaScript对数组进行随机重排的方法
2015/07/22 Javascript
浅析JavaScript 调试方法和技巧
2015/10/22 Javascript
JS实现获取键盘按下的按键并显示在页面上的方法
2015/11/04 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
jQuery中JSONP的两种实现方式详解
2016/09/26 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
用js简单提供增删改查接口
2019/05/12 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
[07:03]显微镜下的DOTA2第九期——430圣堂刺客杀戮秀
2014/06/20 DOTA
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
python中使用while循环的实例
2019/08/05 Python
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
GC是什么?为什么要有GC?
2013/12/08 面试题
新闻专业应届生求职信
2013/10/31 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
浅析Python中的套接字编程
2021/06/22 Python
python识别围棋定位棋盘位置
2021/07/26 Python
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers