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的几种开发工具介绍
Mar 07 Python
python实现划词翻译
Apr 23 Python
使用C++扩展Python的功能详解
Jan 12 Python
分析Python中解析构建数据知识
Jan 20 Python
python中的json总结
Oct 11 Python
对pandas的算术运算和数据对齐实例详解
Dec 22 Python
Django之提交表单与前后端交互的方法
Jul 19 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
python编写一个会算账的脚本的示例代码
Jun 02 Python
Python如何重新加载模块
Jul 29 Python
python实现图片九宫格分割的示例
Apr 25 Python
Python Django获取URL中的数据详解
Nov 01 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
php4的session功能评述(二)
2006/10/09 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
解析php获取字符串的编码格式的方法(函数)
2013/06/21 PHP
总结对比php中的多种序列化
2016/08/28 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
canvas 实现中国象棋
2017/02/17 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
vue实现同一个页面可以有多个router-view的方法
2018/09/20 Javascript
js中数组常用方法总结(推荐)
2019/04/09 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
Vue插槽_特殊特性slot,slot-scope与指令v-slot说明
2020/09/04 Javascript
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
python爬虫基本知识
2018/03/05 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
python:动态路由的Flask程序代码
2019/11/22 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
.net工程师笔试题
2012/06/09 面试题
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
护理自我鉴定范文
2013/10/06 职场文书
大学系主任推荐信范文
2013/12/24 职场文书
顶岗实习计划书
2014/01/10 职场文书
《童年》教学反思
2014/02/18 职场文书
职业生涯规划书前言
2014/04/15 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
2016清明节森林防火广播稿
2015/12/17 职场文书
Python 数据可视化工具 Pyecharts 安装及应用
2022/04/20 Python