聊聊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时间整形转标准格式的示例分享
Feb 14 Python
python打开网页和暂停实例
Sep 30 Python
Python中自定义函数的教程
Apr 27 Python
Python计算三维矢量幅度的方法
Jun 15 Python
老生常谈Python进阶之装饰器
May 11 Python
Python的CGIHTTPServer交互实现详解
Feb 08 Python
Django页面数据的缓存与使用的具体方法
Apr 23 Python
python使用KNN算法识别手写数字
Apr 25 Python
Python数据结构与算法(几种排序)小结
Jun 22 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
Oct 30 Python
python实现高斯(Gauss)迭代法的例子
Nov 20 Python
python中元组的用法整理
Jun 15 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开发GUI
2006/10/09 PHP
简单的过滤字符串中的HTML标记
2006/12/25 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
模拟用户操作Input元素,不会触发相应事件
2007/05/11 Javascript
OfflineSave离线保存代码再次发布使用说明
2007/05/23 Javascript
弹出层之1:JQuery.Boxy (一) 使用介绍
2011/10/06 Javascript
js三种排序算法分享
2012/08/16 Javascript
30分钟就入门的正则表达式基础教程
2013/02/25 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
微信小程序实现签到功能
2018/10/31 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
Python中Random和Math模块学习笔记
2015/05/18 Python
Python中的localtime()方法使用详解
2015/05/22 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
Python输入二维数组方法
2018/04/13 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
网易有道2017内推编程题 洗牌(python)
2019/06/19 Python
python 字符串常用函数详解
2019/09/11 Python
python绘制随机网络图形示例
2019/11/21 Python
Python FFT合成波形的实例
2019/12/04 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
让ie浏览器成为支持html5的浏览器的解决方法(使用html5shiv)
2014/04/08 HTML / CSS
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
财产公证书样本
2014/04/04 职场文书
电子商务系毕业生自荐信
2014/05/29 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
python实现自动化群控的步骤
2021/04/11 Python
Windows7下FTP搭建图文教程
2022/08/05 Servers