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 相关文章推荐
pyramid配置session的方法教程
Nov 27 Python
Python中的多重装饰器
Apr 11 Python
python图像处理之镜像实现方法
May 30 Python
Python批量创建迅雷任务及创建多个文件
Feb 13 Python
Python制作词云的方法
Jan 03 Python
numpy使用fromstring创建矩阵的实例
Jun 15 Python
Python地图绘制实操详解
Mar 04 Python
Python3 实现文件批量重命名示例代码
Jun 03 Python
Pytorch技巧:DataLoader的collate_fn参数使用详解
Jan 08 Python
在Tensorflow中查看权重的实现
Jan 24 Python
Selenium使用Chrome模拟手机浏览器方法解析
Apr 10 Python
Jupyter notebook运行Spark+Scala教程
Apr 10 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
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
javascript在myeclipse中报错的解决方法
2013/10/29 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
正则表达式,替换所有HTML标签的简单实例
2016/11/28 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
关于webpack代码拆分的解析
2017/07/20 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
Vue 事件处理操作实例详解
2019/03/05 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
python实用代码片段收集贴
2015/06/03 Python
python编程实现希尔排序
2017/04/13 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
python模块smtplib学习
2018/05/22 Python
python整小时 整天时间戳获取算法示例
2019/02/20 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
python matplotlib折线图样式实现过程
2019/11/04 Python
python保存log日志,实现用log日志画图
2019/12/24 Python
opencv+python实现均值滤波
2020/02/19 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
python 实现图片批量压缩的示例
2020/12/18 Python
大学生应聘自荐信
2013/10/11 职场文书
毕业生个人求职信范例分享
2013/12/17 职场文书
受伤赔偿协议书
2014/09/24 职场文书
计划生育汇报材料
2014/12/26 职场文书
优秀范文:读《红岩》有感3篇
2019/10/14 职场文书
Python使用UDP实现720p视频传输的操作
2021/04/24 Python