Python异常处理机制结构实例解析


Posted in Python onJuly 23, 2020

首先,Python 完整的异常处理语法结构如下:

try:
  #业务实现代码
except Exception1 as e:
  #异常处理块1
  ...
except Exception2 as e:
  #异常处理块2
  ...
#可以有多个 except
...
else:
  #正常处理块
finally :
  #资源回收块
  ...

整个异常处理结构的执行过程,如图 1 所示。

Python异常处理机制结构实例解析

注意,在整个异常处理结构中,只有 try 块是必需的,也就是说:

  • 如果没有 try 块,则不能有后面的 except 块、else 块和 finally 块。但是也不能只使用 try 块,要么使用 try except 结构,要么使用 try finally 结构;
  • except 块、else 块、finally 块都是可选的,当然也可以同时出现;
  • 可以有多个 except 块,但捕获父类异常的 except 块应该位于捕获子类异常的 except 块的后面;
  • 多个 except 块必须位于 try 块之后,finally 块必须位于所有的 except 块之后。
  • 要使用 else 块,其前面必须包含 try 和 except。

其中,很多初学者分不清 finally 和 else 的区别,这里着重说一下。else 语句块只有在没有异常发生的情况下才会执行,而 finally 语句则不管异常是否发生都会执行。不仅如此,无论是正常退出、遇到异常退出,还是通过 break、continue、return 语句退出,finally 语句块都会执行。

注意,如果程序中运行了强制退出 Python 解释器的语句(如 os._exit(1) ),则 finally 语句将无法得到执行。例如:

import os
try:
  os._exit(1)
finally:
  print("执行finally语句")

运行程序,没有任何输出。因此,除非在 try 块、except 块中调用了退出 Python 解释器的方法,否则不管在 try 块、except 块中执行怎样的代码,出现怎样的情况,异常处理的 finally 块总会被执行。

另外在通常情况下,不要在 finally 块中使用如 return 或 raise 等导致方法中止的语句(raise 语句将在后面介绍),一旦在 finally 块中使用了 return 或 raise 语句,将会导致 try 块、except 块中的 return、raise 语句失效。看如下程序:

def test():
  try:
    # 因为finally块中包含了return语句
    # 所以下面的return语句失去作用
    return True
  finally:
    return False
print(test())

上面程序在 finally 块中定义了一条 return False 语句,这将导致 try 块中的 return true 失去作用。运行上面程序,输出结果为:

False

同样,如果 Python 程序在执行 try 块、except 块包含有 return 或 raise 语句,则 Python 解释器执行到该语句时,会先去查找 finally 块,如果没有 finally 块,程序才会立即执行 return 或 raise 语句;反之,如果找到 finally 块,系统立即开始执行 finally 块,只有当 finally 块执行完成后,系统才会再次跳回来执行 try 块、except 块里的 return 或 raise 语句。

但是,如果在 finally 块里也使用了 return 或 raise 等导致方法中止的语句,finally 块己经中止了方法,系统将不会跳回去执行 try 块、except 块里的任何代码。

尽量避免在 finally 块里使用 return 或 raise 等导致方法中止的语句,否则可能出现一些很奇怪的情况。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用7z解压apk包的方法
Apr 18 Python
Python科学计算之Pandas详解
Jan 15 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
pandas表连接 索引上的合并方法
Jun 08 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
Jan 04 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
python实现替换word中的关键文字(使用通配符)
Feb 13 Python
Python实现代码块儿折叠
Apr 15 Python
Keras设置以及获取权重的实现
Jun 19 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
Python通过yagmail实现发送邮件代码解析
Oct 27 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
Jul 23 #Python
Python字符串函数strip()原理及用法详解
Jul 23 #Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 #Python
Python中Selenium库使用教程详解
Jul 23 #Python
Python基于traceback模块获取异常信息
Jul 23 #Python
Python TestSuite生成测试报告过程解析
Jul 23 #Python
快速解释如何使用pandas的inplace参数的使用
Jul 23 #Python
You might like
双料怀旧--SHARP GF515的维护、修理和简单调试
2021/03/02 无线电
中东人咖啡哲学
2021/03/03 咖啡文化
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
2013/06/24 PHP
3款实用的在线JS代码工具(国外)
2012/03/15 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
javascript函数定义的几种区别小结
2014/01/06 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
js面向对象编程总结
2017/02/16 Javascript
在javascript中,null>=0 为真,null==0却为假,null的值详解
2017/02/22 Javascript
canvas绘制环形进度条
2017/02/23 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
js+canvas实现验证码功能
2020/09/21 Javascript
微信小程序实现拖拽功能
2019/09/26 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
Python实现比较两个列表(list)范围
2015/06/12 Python
python中的字典使用分享
2016/07/31 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
2018/01/05 Python
python3+PyQt5实现自定义分数滑块部件
2018/04/24 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
Python3 执行Linux Bash命令的方法
2019/07/12 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
推荐8款常用的Python GUI图形界面开发框架
2020/02/23 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
HelloFresh澳大利亚:订购你的美味食品盒、健康餐食
2018/03/28 全球购物
医学专业个人求职自荐信格式
2013/09/23 职场文书
银行存款证明样本
2014/01/17 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
2015年中秋寄语
2015/07/31 职场文书
Python基础学习之奇异的GUI对话框
2021/05/27 Python