聊聊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 08 Python
Python中的面向对象编程详解(下)
Apr 13 Python
PyQt 线程类 QThread使用详解
Jul 16 Python
详解python之协程gevent模块
Jun 14 Python
python3实现磁盘空间监控
Jun 21 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
由面试题加深对Django的认识理解
Jul 19 Python
Python学习笔记之列表推导式实例分析
Aug 13 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
Feb 25 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
Mar 26 Python
2021年pycharm的最新安装教程及基本使用图文详解
Apr 03 Python
Python 视频画质增强
Apr 28 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/03/31 PHP
php数组查找函数总结
2014/11/18 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
javascript截取字符串小结
2015/04/28 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
Vue实现active点击切换方法
2018/03/16 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
2019/02/21 Javascript
微信小程序实现左滑动删除效果
2020/03/30 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
对layui中table组件工具栏的使用详解
2019/09/19 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
Python中文分词实现方法(安装pymmseg)
2016/06/14 Python
Python用threading实现多线程详解
2017/02/03 Python
Python模块WSGI使用详解
2018/02/02 Python
python opencv之SIFT算法示例
2018/02/24 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
Python 列表反转显示的四种方法
2020/11/16 Python
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
幼儿园课题实施方案
2014/05/14 职场文书
结婚老公保证书
2015/02/26 职场文书
再读《皇帝的新衣》的读后感悟!
2019/08/07 职场文书
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python
Python中的 Set 与 dict
2022/03/13 Python
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python