聊聊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自动格式化json文件的方法
Mar 11 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
Jan 08 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 Python
通过python 执行 nohup 不生效的解决
Apr 16 Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 Python
Python中bisect的用法及示例详解
Jul 20 Python
Python如何对齐字符串
Jul 30 Python
Python如何使用logging为Flask增加logid
Mar 30 Python
pdf论文中python画的图Type 3 fonts字体不兼容的解决方案
Apr 24 Python
对PyTorch中inplace字段的全面理解
May 22 Python
python_tkinter事件类型详情
Mar 20 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统计目录大小的自定义函数分享
2014/11/18 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
jQuery ajax BUG:object doesn't support this property or method
2010/07/06 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
JavaScript轻松创建级联函数的方法示例
2017/02/10 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
JavaScript根据json生成html表格的示例代码
2018/10/24 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
Python实现将xml导入至excel
2015/11/20 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
Python高级用法总结
2018/05/26 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
python面试题之列表声明实例分析
2019/07/08 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
Python bisect模块原理及常见实例
2020/06/17 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
表彰会主持词
2014/03/26 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
2015元旦节寄语
2014/12/08 职场文书
小学教师自我评价
2015/03/04 职场文书
网站文案策划岗位职责
2015/04/14 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
教师信息技术学习心得体会
2016/01/21 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript