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基础教程之类class定义使用方法
Feb 20 Python
Python去掉字符串中空格的方法
Mar 11 Python
python实现zencart产品数据导入到magento(python导入数据)
Apr 03 Python
python轻松实现代码编码格式转换
Mar 26 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
Python最火、R极具潜力 2017机器学习调查报告
Dec 11 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
Apr 02 Python
python获取交互式ssh shell的方法
Feb 14 Python
python创造虚拟环境方法总结
Mar 04 Python
python操作cfg配置文件方式
Dec 22 Python
python 爬取小说并下载的示例
Dec 07 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Apr 11 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数据库密码的找回的步骤
2011/01/12 PHP
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
JavaScript判断textarea值是否为空并给出相应提示
2014/09/04 Javascript
javascript常用的方法整理
2015/08/20 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
JavaScript数组类型Array相关的属性与方法详解
2020/09/08 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
[37:21]完美世界DOTA2联赛PWL S2 Inki vs Magma 第二场 11.22
2020/11/24 DOTA
Python 代码性能优化技巧分享
2012/08/07 Python
python获取从命令行输入数字的方法
2015/04/29 Python
python实现外卖信息管理系统
2018/01/11 Python
python指定写入文件时的编码格式方法
2018/06/07 Python
Python转换时间的图文方法
2019/07/01 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
python写入数据到csv或xlsx文件的3种方法
2019/08/23 Python
Python sqlite3查询操作过程解析
2020/02/20 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
纯CSS绘制漂亮的圆形图案效果
2014/05/07 HTML / CSS
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
施工安全协议书
2013/12/11 职场文书
英语专业个人求职信范文
2014/02/01 职场文书
品德评语大全
2014/05/05 职场文书
优秀工作者事迹材料
2014/12/26 职场文书
病房管理制度范本
2015/08/06 职场文书
Redis 报错 error:NOAUTH Authentication required
2022/05/15 Redis