码迷,mamicode.com
首页 > 其他好文 > 详细

第十八节:上下文管理协议

时间:2020-04-25 00:41:55      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:return   self   返回   col   name   __init__   turn   bsp   elf   

with obj as f:
‘代码块‘

1.with obj ----》触发obj.__enter__(),拿到返回值

2.as f----->f=返回值、

3.with obj as f 等同于 f=obj.__enter__()

4.执行代码块
一:没有异常的情况下,整个代码块运行完毕后去触发__exit__,它的三个参数都为None
二:有异常的情况下,从异常出现的位置直接触发__exit__
a:如果__exit__的返回值为True,代表吞掉了异常,程序继续执行
b:如果__exit__的返回值不为True,代表吐出了异常,__exit__的的运行完毕就代表了整个with语句的执行完毕

class Foo:
    def __init__(self,name):
        self.name=name

    def __enter__(self):
        print(执行enter)
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print(执行exit)
        print(exc_type)  #异常类型
        print(exc_val)   #异常值
        print(exc_tb)    #追踪信息
        return True
with Foo(a.txt) as f:
    print(f)
    print(asd)  #触发__exit__,如果返回True,代码块运行完毕,程序继续执行
    print(f.name)
    print(-----------------)

print(0000)

使用场景:定制释放资源机制,网络连接和锁的编程环境

 

第十八节:上下文管理协议

标签:return   self   返回   col   name   __init__   turn   bsp   elf   

原文地址:https://www.cnblogs.com/sxdpython/p/12770966.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!