python中with用法讲解


Posted in Python onFebruary 07, 2020

我们都知道打开文件有两种方法:

  • f = open()
  • with open() as f:

这两种方法的区别就是第一种方法需要我们自己关闭文件;f.close(),而第二种方法不需要我们自己关闭文件,无论是否出现异常,with都会自动帮助我们关闭文件,这是为什么呢?

我们先自定义一个类,用with来打开它:

class Foo():
  def __enter__(self):
    print("enter called")
  def __exit__(self, exc_type, exc_val, exc_tb):
    print("exit called")
    print("exc_type :%s"%exc_type)
    print("exc_val :%s"%exc_val)
    print("exc_tb :%s"%exc_tb)


with Foo() as foo:
  print("hello python")
  a = 1/0
  print("hello end")

执行结果:

enter called
Traceback (most recent call last):
hello python
exit called
exc_type :<class 'ZeroDivisionError'>
exc_val :division by zero
 File "F:/workspaces/python_workspaces/flask_study/with.py", line 25, in <module>
  a = 1/0
exc_tb :<traceback object at 0x0000023C4EDBB9C8>
ZeroDivisionError: division by zero

Process finished with exit code 1

我们看到,执行结果的输入顺序,分析如下:

当我们with Foo() as foo:时,此时会执行__enter__方法,然后进入执行体,也就是:

print("hello python")
a = 1/0
print("hello end")

语句,但是在a=1/0出现了异常,with将会中止,此时就执行__exit__方法,就算不出现异常,当执行体被执行完毕之后,__exit__方法仍然被执行一次。

我们回到with open("file")as f: 不用关闭文件的原因就是在__exit__方法中,存在关闭文件的操作,所以不用我们手工关闭文件,with已将为我们做好了这个操作,这就可以理解了。

以上就是小编整理的相关内容,如果大家有任何补充可以联系三水点靠木小编。

Python 相关文章推荐
Python在信息学竞赛中的运用及Python的基本用法(详解)
Aug 15 Python
python如何生成各种随机分布图
Aug 27 Python
Python 判断奇数偶数的方法
Dec 20 Python
用Python将结果保存为xlsx的方法
Jan 28 Python
关于pandas的离散化,面元划分详解
Nov 22 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 Python
tensorflow实现将ckpt转pb文件的方法
Apr 22 Python
基于Python正确读取资源文件
Sep 14 Python
详解python模块pychartdir安装及导入问题
Oct 22 Python
使用Python获取爱奇艺电视剧弹幕数据的示例代码
Jan 12 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
Mar 04 Python
python 管理系统实现mysql交互的示例代码
Dec 06 Python
如何基于Python实现数字类型转换
Feb 07 #Python
Python while循环使用else语句代码实例
Feb 07 #Python
Python matplotlib画曲线例题解析
Feb 07 #Python
python next()和iter()函数原理解析
Feb 07 #Python
使用tensorflow实现矩阵分解方式
Feb 07 #Python
python匿名函数lambda原理及实例解析
Feb 07 #Python
Python用input输入列表的实例代码
Feb 07 #Python
You might like
Memcache 在PHP中的使用技巧
2010/02/08 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
List Information About the Binary Files Used by an Application
2007/06/11 Javascript
js中传递特殊字符(+,&amp;)的方法
2014/01/16 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
动态加载js文件简单示例
2016/04/21 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
layui table数据修改的回显方法
2019/09/04 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
python类定义的讲解
2013/11/01 Python
教大家使用Python SqlAlchemy
2016/02/12 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
python使用fork实现守护进程的方法
2017/11/16 Python
详解Python_shutil模块
2019/03/15 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
CSS3中animation实现流光按钮效果
2020/12/21 HTML / CSS
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
使用Html5中的cavas画一面国旗
2019/09/25 HTML / CSS
简约控的天堂:The Undone
2016/12/21 全球购物
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
英国门把手公司:Door Handle Company
2019/05/12 全球购物
元旦晚会邀请函
2014/01/27 职场文书
粗加工管理制度
2014/02/04 职场文书
《识字五》教学反思
2014/03/01 职场文书
祖国在我心中演讲稿600字
2014/05/04 职场文书
英语专业求职信
2014/07/08 职场文书
老公保证书
2015/01/17 职场文书
高考学习决心书
2015/02/04 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
Spring Bean的实例化之属性注入源码剖析过程
2021/06/13 Java/Android