聊聊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格式化字符串实例总结
Sep 28 Python
详解Python中expandtabs()方法的使用
May 18 Python
Python内建数据结构详解
Feb 03 Python
浅谈django开发者模式中的autoreload是如何实现的
Aug 18 Python
详解Python循环作用域与闭包
Mar 21 Python
python 命令行传入参数实现解析
Aug 30 Python
Python实现数值积分方式
Nov 20 Python
python实现画循环圆
Nov 23 Python
python代码打印100-999之间的回文数示例
Nov 24 Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
分析Python list操作为什么会错误
Nov 17 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安装攻略:常见问题解答(一)
2006/10/09 PHP
php smarty截取中文字符乱码问题?gb2312/utf-8
2011/11/07 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
php实现购物车产品删除功能(2)
2020/07/23 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
用JavaScript隐藏控件的方法
2009/09/21 Javascript
JS在IE和FireFox之间常用函数的区别小结
2010/03/12 Javascript
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
2013/03/28 Javascript
Asp.Net alert弹出提示信息的几种方法总结
2014/01/29 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
使用impress.js制作幻灯片
2015/09/09 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
微信jssdk用法汇总
2016/07/16 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
[01:18:45]DOTA2-DPC中国联赛 正赛 DLG vs Dragon BO3 第三场2月1日
2021/03/11 DOTA
Python中的choice()方法使用详解
2015/05/15 Python
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
django ajax json的实例代码
2018/05/29 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
Python+PyQt5实现美剧爬虫可视工具的方法
2019/04/25 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
django 前端页面如何实现显示前N条数据
2020/03/16 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
css3隔行变换色实现示例
2014/02/19 HTML / CSS
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
庆中秋节主题活动方案
2014/02/03 职场文书
postgresql无序uuid性能测试及对数据库的影响
2021/06/11 PostgreSQL