聊聊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开发简易版在线音乐播放器
Mar 03 Python
python实现FTP服务器服务的方法
Apr 11 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
Python实现的选择排序算法示例
Nov 29 Python
Python编程argparse入门浅析
Feb 07 Python
Django 日志配置按日期滚动的方法
Jan 31 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
python读写配置文件操作示例
Jul 03 Python
windows10环境下用anaconda和VScode配置的图文教程
Mar 30 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
利用Python实现Excel的文件间的数据匹配功能
Jun 16 Python
Python生成pdf目录书签的实例方法
Oct 29 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
Javascript 作用域使用说明
2009/08/13 Javascript
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
js 获取radio按钮值的实例
2013/08/17 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
BootStrap智能表单实战系列(七)验证的支持
2016/06/13 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
angular 实时监听input框value值的变化触发函数方法
2018/08/31 Javascript
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
2020/03/26 Javascript
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
pandas数据处理基础之筛选指定行或者指定列的数据
2018/05/03 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
网络编辑岗位职责范本
2014/02/10 职场文书
留学推荐信范文
2014/05/10 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
研讨会通知
2015/04/27 职场文书
公司辞职信模板
2015/05/13 职场文书
无罪辩护词范文
2015/05/21 职场文书
运动会5000米加油稿
2015/07/21 职场文书
2016年端午节红领巾广播稿
2015/12/18 职场文书
高一化学教学反思
2016/02/22 职场文书
2019秋季运动会口号
2019/06/25 职场文书
Java存储没有重复元素的数组
2022/04/29 Java/Android
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS