聊聊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 11 Python
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
Python3.6.0+opencv3.3.0人脸检测示例
May 25 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
使用Python微信库itchat获得好友和群组已撤回的消息
Jun 24 Python
python发送告警邮件脚本
Sep 17 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 Python
django-allauth入门学习和使用详解
Jul 03 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
Python3.7安装pyaudio教程解析
Jul 24 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 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
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
使用PHP制作新闻系统的思路
2006/10/09 PHP
PHP 删除一个目录及目录下的所有文件的函数代码
2010/05/26 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
PHP实现文件上传与下载
2020/08/28 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
JavaScript中关于indexOf的使用方法与问题小结
2010/08/05 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
js中火星坐标、百度坐标、WGS84坐标转换实现方法示例
2020/03/02 Javascript
JavaScript 实现继承的几种方式
2021/02/19 Javascript
Python入门之modf()方法的使用
2015/05/15 Python
Python中的localtime()方法使用详解
2015/05/22 Python
python中管道用法入门实例
2015/06/04 Python
Python实现爬虫爬取NBA数据功能示例
2018/05/28 Python
pytorch中的卷积和池化计算方式详解
2020/01/03 Python
Python写出新冠状病毒确诊人数地图的方法
2020/02/12 Python
Python range与enumerate函数区别解析
2020/02/28 Python
pip安装提示Twisted错误问题(Python3.6.4安装Twisted错误)
2020/05/09 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
英国马莎百货官网:Marks & Spencer
2016/07/29 全球购物
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
简历自我评价模版
2014/01/31 职场文书
小组名称和口号
2014/06/09 职场文书
2015年毕业生自我鉴定模板
2014/09/19 职场文书
2014年财政局工作总结
2014/12/09 职场文书
一年级语文上册复习计划
2015/01/17 职场文书
分享python函数常见关键字
2022/04/26 Python
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android
Go语言编译原理之变量捕获
2022/08/05 Golang