聊聊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使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
python获取指定网页上所有超链接的方法
Apr 04 Python
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
Jul 04 Python
Python设计模式之抽象工厂模式
Aug 25 Python
python中的set实现不重复的排序原理
Jan 24 Python
python中plot实现即时数据动态显示方法
Jun 22 Python
Python实现模拟登录网易邮箱的方法示例
Jul 05 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
python实现输出一个序列的所有子序列示例
Nov 18 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
Python3获取cookie常用三种方案
Oct 05 Python
高考要来啦!用Python爬取历年高考数据并分析
Jun 03 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
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
深入解析php之sphinx
2013/05/15 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
运用jquery实现table单双行不同显示并能单行选中
2009/07/25 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
Jquery组件easyUi实现选项卡切换示例
2016/08/23 Javascript
基于JS实现移动端向左滑动出现删除按钮功能
2017/02/22 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
js使用generator函数同步执行ajax任务
2017/09/05 Javascript
原生JS实现移动端web轮播图详解(结合Tween算法造轮子)
2017/09/10 Javascript
JS和JQuery实现雪花飘落效果
2017/11/30 jQuery
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
python人人网登录应用实例
2014/09/26 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
Python创建一个空的dataframe,并循环赋值的方法
2018/11/08 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
全球知名旅游社区巴西站点:TripAdvisor巴西
2016/07/21 全球购物
香港草莓网土耳其网站:Strawberrynet TR
2017/03/02 全球购物
澳大利亚正品化妆品之家:Cosmetic Capital
2017/07/03 全球购物
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
Unix/Linux开发面试题
2016/08/16 面试题
社区工作者感言
2014/03/02 职场文书
《谁的本领大》教后反思
2014/04/25 职场文书
初中教师德育工作总结2015
2015/05/12 职场文书
灵魂歌王观后感
2015/06/17 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
如何使用vue3打造一个物料库
2021/05/08 Vue.js
MongoDB修改oplog大小的四种方法
2022/04/11 MongoDB