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中设计模式之Decorator装饰器模式的要点
Mar 02 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
python实现单链表中删除倒数第K个节点的方法
Sep 28 Python
Python动态声明变量赋值代码实例
Dec 30 Python
python统计文章中单词出现次数实例
Feb 27 Python
Python 读取WAV音频文件 画频谱的实例
Mar 14 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
Python pandas 列转行操作详解(类似hive中explode方法)
May 18 Python
python实现批量转换图片为黑白
Jun 16 Python
python和js交互调用的方法
Jun 23 Python
Python性能分析工具py-spy原理用法解析
Jul 27 Python
python中Array和DataFrame相互转换的实例讲解
Feb 03 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执行速度全攻略
2006/10/09 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
Ajax请求PHP后台接口返回信息的实例代码
2018/08/21 PHP
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
javascript实现checkbox全选的代码
2015/04/30 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
js创建对象的方法汇总
2016/01/07 Javascript
JavaScript如何实现组合列表框中元素移动效果
2016/03/01 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
Form表单上传文件(type=&quot;file&quot;)的使用
2017/08/03 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
Python的标准模块包json详解
2017/03/13 Python
Python实现识别手写数字大纲
2018/01/29 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
this关键字的作用
2016/01/30 面试题
会计电算化应届生求职信
2013/11/03 职场文书
文秘大学生求职信
2014/02/25 职场文书
计算机系本科生求职信
2014/05/31 职场文书
2014年征兵标语
2014/06/20 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
生产现场禁烟通知
2015/04/23 职场文书
学生通报表扬范文
2015/05/04 职场文书
《少年闰土》教学反思
2016/02/18 职场文书