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 相关文章推荐
wxPython窗口的继承机制实例分析
Sep 28 Python
跟老齐学Python之print详解
Sep 28 Python
Python最基本的输入输出详解
Apr 25 Python
Python实现PS图像明亮度调整效果示例
Jan 23 Python
Flask-Mail用法实例分析
Jul 21 Python
Python实现的线性回归算法示例【附csv文件下载】
Dec 29 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
python sqlite的Row对象操作示例
Sep 11 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
Python 整行读取文本方法并去掉readlines换行\n操作
Sep 03 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
怎样才能成为PHP高手?学会“懒惰”的编程
2006/12/05 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
php+js实现裁剪任意形状图片
2018/10/31 PHP
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
js与jquery实时监听输入框值的oninput与onpropertychange方法
2015/02/05 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
微信小程序开发探究
2016/12/27 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
微信小程序实现无限滚动列表
2020/05/29 Javascript
js+springMVC 提交数组数据到后台的实例
2019/09/21 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
python实现从字符串中找出字符1的位置以及个数的方法
2014/08/25 Python
Python中几种操作字符串的方法的介绍
2015/04/09 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
python安装scipy的步骤解析
2019/09/28 Python
如何使用Python发送HTML格式的邮件
2020/02/11 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
web字体加载方案优化小结
2019/11/29 HTML / CSS
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
公司成本主管岗位责任制
2014/02/21 职场文书
美术第二课堂活动总结
2014/07/08 职场文书
个人求职信格式范文
2015/03/20 职场文书
教师节领导致辞
2015/07/29 职场文书
同学聚会开幕词
2019/04/02 职场文书
Python使用openpyxl模块处理Excel文件
2022/06/05 Python
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL