自动关闭的with 语句

with语句 (一种上下文管理器)

           所谓上下文管理器是指:任何实现了__enter__()和__exit__()方法的对象,with语句可以自动管理上下文资源,不论什么原因跳出with块,都能保证文件正确关闭,以此来达到释放资源的目的。

           在Python中,若需要打开文件并访问文件,您可以使用open()函数来实现。Open返回一个文件对象,该文件对象具有用于获取有关已打开文件的信息和对其进行操作的方法和属性。 对打开的文件进行操作后,就需要关闭该文件,否则会出现什么情况呢?极端情况下可能会出现”Too many open files”的错误,因为系统允许你打开的文件数量是有限的。

  下面来看看如何正确关闭一个文件:....

          普通版:

                   关闭文件语法格式:文件对象.close()

                    

​
>>> f1=open("test1.txt","w")      #写方式打开一个不存在的文件,等价于创建文件
>>> f1.write("Hello,Python")
12
>>> f1.close()

​

            

              其中存在一个潜在的问题,如果在调用write的过程中出现异常后续代码无法进行,close   方法就无法被正常调用,文件就无法被正常关闭。         

          进化版:

                  

f1=open("test1.txt","w")
try:
    f1.write("Hello,Python")
except  SyntaxError:
    print("SyntaxError")
finally:
    f1.close()

               

               try代码块程序异常时,后续代码块不再执行,而直接跳转到except代码块,但无论如   何,finally块的代码最终都会被执行,close在finally代码中 ,文件一定会关闭

          高级版:

                 自动关闭的with语句语法格式:

                               with  open(filename,mode)  as f:

                                             #文件处理操作

               

#ContentMgr实现了特殊方法__enter__()和__exit__(),所以称该类对象遵守上下文管理器协议,该类对象的实例对象,称为上下文管理器(ContentMgr())

class ContentMgr (object):
    def __enter__ (self):
        print("enter方法被调用执行了")
        return self
    def __exit__ (self,exc_type,exc_val,exc_tb):
        print("exit方法被调用执行了")
    def show (self):
        print("show方法被调用执行了")
with ContentMgr() as file:              #相当于file=ContentMgr()
    file.show()


#执行结果如下
enter方法被调用执行了
show方法被调用执行了
exit方法被调用执行了

               离开运行时上文,自动调用上下文管理器管理器特殊方法__exit__()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZSup{A}

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值