Python try except finally资源回收的实现


Posted in Python onJanuary 25, 2021

Python 异常处理机制还提供了一个 finally 语句,通常用来为 try 块中的程序做扫尾清理工作。

注意,和 else 语句不同,finally 只要求和 try 搭配使用,而至于该结构中是否包含 except 以及 else,对于 finally 不是必须的(else 必须和 try except 搭配使用)。

在整个异常处理机制中,finally 语句的功能是:无论 try 块是否发生异常,最终都要进入 finally 语句,并执行其中的代码块。

基于 finally 语句的这种特性,在某些情况下,当 try 块中的程序打开了一些物理资源(文件、数据库连接等)时,由于这些资源必须手动回收,而回收工作通常就放在 finally 块中。

Python 垃圾回收机制,只能帮我们回收变量、类对象占用的内存,而无法自动完成类似关闭文件、数据库连接等这些的工作。

读者可能会问,回收这些物理资源,必须使用 finally 块吗?当然不是,但使用 finally 块是比较好的选择。首先,try 块不适合做资源回收工作,因为一旦 try 块中的某行代码发生异常,则其后续的代码将不会得到执行;其次 except 和 else 也不适合,它们都可能不会得到执行。而 finally 块中的代码,无论 try 块是否发生异常,该块中的代码都会被执行。

举个例子:

try:
  a = int(input("请输入 a 的值:"))
  print(20/a)
except:
  print("发生异常!")
else:
  print("执行 else 块中的代码")  
finally :
  print("执行 finally 块中的代码")

运行此程序:
请输入 a 的值:4
5.0
执行 else 块中的代码
执行 finally 块中的代码

可以看到,当 try 块中代码为发生异常时,except 块不会执行,else 块和 finally 块中的代码会被执行。

再次运行程序:
请输入 a 的值:a
发生异常!
执行 finally 块中的代码

可以看到,当 try 块中代码发生异常时,except 块得到执行,而 else 块中的代码将不执行,finally 块中的代码仍然会被执行。

finally 块的强大还远不止此,即便当 try 块发生异常,且没有合适和 except 处理异常时,finally 块中的代码也会得到执行。例如:

try:
  #发生异常
  print(20/0)
finally :
  print("执行 finally 块中的代码")

程序执行结果为:
执行 finally 块中的代码
Traceback (most recent call last):
  File "D:\python3.6\1.py", line 3, in <module>
    print(20/0)
ZeroDivisionError: division by zero

可以看到,当 try 块中代码发生异常,导致程序崩溃时,在崩溃前 Python 解释器也会执行 finally 块中的代码。

到此这篇关于Python try except finally资源回收的实现的文章就介绍到这了,更多相关Python try except finally  内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
实例讲解Python中的私有属性
Aug 21 Python
使用C语言扩展Python程序的简单入门指引
Apr 14 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
浅谈python配置与使用OpenCV踩的一些坑
Apr 02 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
Django使用详解:ORM 的反向查找(related_name)
May 30 Python
详解django中url路由配置及渲染方式
Feb 25 Python
Python实现微信翻译机器人的方法
Aug 13 Python
python打包成so文件过程解析
Sep 28 Python
分享PyCharm的几个使用技巧
Nov 10 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
pytorch 中nn.Dropout的使用说明
May 20 Python
Python中lru_cache的使用和实现详解
Jan 25 #Python
详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库
Jan 24 #Python
Ubuntu20下的Django安装的方法步骤
Jan 24 #Python
selenium+超级鹰实现模拟登录12306
Jan 24 #Python
使用numpngw和matplotlib生成png动画的示例代码
Jan 24 #Python
详解如何修改jupyter notebook的默认目录和默认浏览器
Jan 24 #Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
Jan 24 #Python
You might like
php导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
PHP实现获取并生成数据库字典的方法
2016/05/04 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
简单的JS多重继承示例
2008/03/13 Javascript
JS的反射问题
2010/04/07 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
js控制不同的时间段显示不同的css样式的实例代码
2013/11/04 Javascript
js中style.display=&quot;&quot;无效的解决方法
2014/10/30 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
详解node如何让一个端口同时支持https与http
2017/07/04 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[57:31]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第一场 2月1日
2021/03/11 DOTA
Django在Win7下的安装及创建项目hello word简明教程
2014/07/14 Python
pycharm实现在虚拟环境中引入别人的项目
2020/03/09 Python
更新升级python和pip版本后不生效的问题解决
2020/04/17 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
新加坡最早生产电动滑板车的制造商之一:FunsToTheFore
2020/09/08 全球购物
"火柴棍式"程序员面试题
2014/03/16 面试题
求职信范文怎么写
2014/01/29 职场文书
扬州个园导游词
2015/02/06 职场文书
2015军训通讯稿大全
2015/07/18 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
python基础之爬虫入门
2021/05/10 Python
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android
Python使用pyecharts控件绘制图表
2022/06/05 Python
Win11无法安装更新补丁KB3045316怎么办 附KB3045316补丁修复教程
2022/08/14 数码科技