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模拟登录百度代码分享(获取百度贴吧等级)
Dec 27 Python
python实现得到一个给定类的虚函数
Sep 28 Python
python使用Flask框架获取用户IP地址的方法
Mar 21 Python
python获得文件创建时间和修改时间的方法
Jun 30 Python
numpy中索引和切片详解
Dec 15 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
Django框架首页和登录页分离操作示例
May 28 Python
如何通过python实现全排列
Feb 11 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
Python 获取异常(Exception)信息的几种方法
Dec 29 Python
python基础之文件处理知识总结
May 23 Python
手残删除python之后的补救方法
Jun 26 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
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
javascript仿php的print_r函数输出json数据
2013/09/13 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
ES6入门教程之变量的解构赋值详解
2019/04/13 Javascript
vue实现拖拽的简单案例 不超出可视区域
2019/07/25 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
Javascript Web Worker使用过程解析
2020/03/16 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
Python脚本实现格式化css文件
2015/04/08 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
django2用iframe标签完成网页内嵌播放b站视频功能
2018/06/20 Python
python之消除前缀重命名的方法
2018/10/21 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
python实现超级马里奥
2020/03/18 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
python搜索算法原理及实例讲解
2020/11/18 Python
python 通过exifread读取照片信息
2020/12/24 Python
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
四方通行旅游网:台湾订房、出国旅游
2017/09/20 全球购物
中医药大学市场营销专业自荐信
2013/09/29 职场文书
优秀学生获奖感言
2014/02/15 职场文书
社区优秀志愿者先进事迹
2014/05/09 职场文书
2015年圣诞节活动总结
2015/03/24 职场文书
家属联谊会致辞
2015/07/31 职场文书
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL