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 相关文章推荐
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
python集合类型用法分析
Apr 08 Python
深入解析Python设计模式编程中建造者模式的使用
Mar 02 Python
基于使用paramiko执行远程linux主机命令(详解)
Oct 16 Python
python的pip安装以及使用教程
Sep 18 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
深入解析python中的实例方法、类方法和静态方法
Mar 11 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
Nov 01 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
Mar 09 Python
python简单实现最大似然估计&amp;scipy库的使用详解
Apr 15 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
杏林同学录(五)
2006/10/09 PHP
php中模拟POST传递数据的两种方法分享
2011/09/16 PHP
CI框架数据库查询之join用法分析
2016/05/18 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
php实现微信支付之企业付款
2018/05/30 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
QQ登录简单实现代码
2021/03/09 Javascript
利用jquery操作select下拉列表框的代码
2010/06/04 Javascript
用jquery实现动画跳到顶部和底部(这个比较简单)
2014/09/01 Javascript
Javascript基础教程之JavaScript语法
2015/01/18 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
2015/10/19 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
jQuery实现点击水纹波动动画
2016/04/10 Javascript
Bootstrap Table的使用总结
2016/10/08 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
利用Python产生加密表和解密表的实现方法
2019/10/15 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
经济管理专业自荐信
2013/12/30 职场文书
教育英语专业毕业生的求职信
2014/03/13 职场文书
售后客服工作职责
2014/06/16 职场文书
房屋授权无偿使用证明
2014/11/29 职场文书
2015年度班主任自我评价
2015/03/11 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
解除租赁合同协议书
2016/03/21 职场文书
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript