聊聊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文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
Python的字典和列表的使用中一些需要注意的地方
Apr 24 Python
Python中list列表的一些进阶使用方法介绍
Aug 15 Python
Python输出带颜色的字符串实例
Oct 10 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
Python内置random模块生成随机数的方法
May 31 Python
python实战串口助手_解决8串口多个发送的问题
Jun 12 Python
pandas的排序和排名的具体使用
Jul 31 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
PIL包中Image模块的convert()函数的具体使用
Feb 26 Python
Python如何使用ConfigParser读取配置文件
Nov 12 Python
如何在Python中妥善使用进度条详解
Apr 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
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
php array_intersect比array_diff快(附详细的使用说明)
2011/07/03 PHP
PHP中header和session_start前不能有输出原因分析
2013/01/11 PHP
如何在smarty中增加类似foreach的功能自动加载数据
2013/06/26 PHP
php获取系统变量方法小结
2015/05/29 PHP
php读取XML的常见方法实例总结
2017/04/25 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
如何用javascript判断录入的日期是否合法
2007/01/08 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
老生常谈Javascript中的原型和this指针
2016/10/09 Javascript
canvas实现十二星座星空图
2017/02/14 Javascript
JavaScript轮播图简单制作方法
2017/02/20 Javascript
详解Vue-基本标签和自定义控件
2017/03/24 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
详解Node中导入模块require和import的区别
2017/08/11 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
vue在index.html中引入静态文件不生效问题及解决方法
2019/04/29 Javascript
Python读写ini文件的方法
2015/05/28 Python
python操作excel的方法
2018/08/16 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
Python:slice与indices的用法
2019/11/25 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
如何提高python 中for循环的效率
2020/04/15 Python
html5 svg 中元素点击事件添加方法
2013/01/16 HTML / CSS
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
旅游管理毕业生自荐信范文
2014/03/19 职场文书
中国入世承诺
2014/04/01 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
简历自我评价范文
2019/04/24 职场文书