【视频教程】012.简述with在文件处理中的作用

导语

你千万别跟任何人谈任何事情。你只要一谈起,就会想念起每一个人来,我只知道我很想念我所谈到的每一个人。

          ——J·D·塞林格《麦田里的守望者》

友情提示:点击阅读原文可以进入B站查看本视频高清版。

#12.简述with方法打开处理文件帮我我们做了什么?
#一般访问文件资源时我们会这样处理:


f = open(
  'c:\test.txt', 'r')
data = f.read()
f.close()
# 这样写没有错,但是容易犯两个毛病:
# 1. 如果在读写时出现异常而忘了异常处理。
# 2. 忘了关闭文件句柄


#以下的加强版本的写法:


f = open('c:\test.txt', 'r')
try:
    data = f.read()
finally:
    f.close()


#以上的写法就可以避免因读取文件时异常的发生而没有关闭问题的处理了。代码长了一些。
#但使用with有更优雅的写法:


with open(r'c:\test.txt', 'r') as f:
    data = f.read()
#with的实现


class Test:
    def __enter__(self):
        print('__enter__() is call!')
        return self
 
    def dosomething(self):
        print('dosomethong!')
 
    def __exit__(self, exc_type, exc_value, traceback):
        print('__exit__() is call!')
        print(f'type:{exc_type}')
        print(f'value:{exc_value}')
        print(f'trace:{traceback}')
        print('__exit()__ is call!')
 
with Test() as sample:
      pass


#当对象被实例化时,就会主动调用__enter__()方法,任务执行完成后就会调用__exit__()方法,
#另外,注意到,__exit__()方法是带有三个参数的(exc_type, exc_value, traceback),
#依据上面的官方说明:如果上下文运行时没有异常发生,那么三个参数都将置为None, 
#这里三个参数由于没有发生异常,的确是置为了None, 与预期一致.






# 修改后不出异常了
class Test:
    def __enter__(self):
        print('__enter__() is call!')
        return self
 
    def dosomething(self):
        x = 1/0
        print('dosomethong!')
 
    def __exit__(self, exc_type, exc_value, traceback):
        print('__exit__() is call!')
        print(f'type:{exc_type}')
        print(f'value:{exc_value}')
        print(f'trace:{traceback}')
        print('__exit()__ is call!')
        return True
 
 
with Test() as sample:




扫码关注,不迷路哦!

Facebook的广告也许正在窃听你的对话

python数据可视化神器--pyecharts 快速入门

【视频教程】011.__init__和__new__的使用

当 Python 中混进一只薛定谔的猫……

LeetCode - 001

和张哥的那些天,互联网人的潜规则

那些年错过的并发知识!

超强汇总:学习Python列表,只需这篇文章就够了

记一次群聊吃瓜引发的JS破解教程

爬虫之线程池 ThreadPoolExecutor 的用法及实战

▼立即加星标,每天看好文▼

1

2

极客学习空间

新媒体人都在关注

喜欢,就为我标星

我今天才知道,我之所以漂泊就是在向你靠近。

--《廊桥遗梦》

猜你喜欢

【视频教程】一行代码实现1-100的和

【视频教程】函数内修改全局变量 

【视频教程】003-列举5个python标准库    

【视频教程】004.字典删除键值对和合并字典

【视频教程】005. 单引号、双引号和三引号的区别   

【视频教程】006.列表重复元素去除

【视频教程】007.args和kwargs的理解

【视频教程】008.python中单下划线和双下划线

【视频教程】009.说说AOP和装饰器

【视频教程】010.Python内置数据类型

【视频教程】011.__init__和__new__的使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值