聊聊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数组条件过滤filter函数使用示例
Jul 22 Python
python解析xml文件操作实例
Oct 05 Python
python虚拟环境virtualenv的安装与使用
Sep 21 Python
python实现人脸识别代码
Nov 08 Python
python使用Matplotlib画饼图
Sep 25 Python
python如何统计代码运行的时长
Jul 24 Python
Django Form 实时从数据库中获取数据的操作方法
Jul 25 Python
Pytorch之parameters的使用
Dec 31 Python
Python chardet库识别编码原理解析
Feb 18 Python
python修改linux中文件(文件夹)的权限属性操作
Mar 05 Python
python基础之while循环语句的使用
Apr 20 Python
python绘制云雨图raincloud plot
Aug 05 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和ACCESS写聊天室(六)
2006/10/09 PHP
PHP小教程之实现双向链表
2014/06/12 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
jQuery之折叠面板的深入解析
2013/06/19 Javascript
Node.js的环境安装配置(使用nvm方式)
2016/10/11 Javascript
探究JavaScript中的五种事件处理程序方式
2016/12/07 Javascript
JS中绑定事件顺序(事件冒泡与事件捕获区别)
2017/01/24 Javascript
BootStrap select2 动态改变值的方法
2017/02/10 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
微信小程序实现点击卡片 翻转效果
2019/09/04 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
Node.js web 应用如何封装到Docker容器中
2020/09/01 Javascript
python简单程序读取串口信息的方法
2015/03/13 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
Python中字符串的格式化方法小结
2016/05/03 Python
python二分查找算法的递归实现方法
2016/05/12 Python
Python 文件处理注意事项总结
2017/04/10 Python
关于python的list相关知识(推荐)
2017/08/30 Python
儿童编程python入门
2018/05/08 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
Dyson戴森波兰官网:Dyson.pl
2019/08/05 全球购物
类的返射机制中的包及核心类
2016/09/12 面试题
2014年乡镇工会工作总结
2014/12/02 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
2019最新激励员工口号大全!
2019/06/28 职场文书
实用干货:敬酒词大全,帮你应付各种场合
2019/11/21 职场文书
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL