python

上下文管理协议:

with + __enter__ + __exit__

#上下问管理协议:
#with + __enter__ + __exit__

class Test():
    def __init__(self,file):
        self.file = file

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

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("执行exit")
        #异常类型
        print(exc_type)
        #异常的数值
        print(exc_val)
        #异常的traceback
        print(exc_tb)

        # return True

# with 开始执行时触发Test __enter__方法
# 当with 内的代码执行完后,执行__exit__方法
with Test("a.txt") as f:
    print(sadsada)

#总结:
# 执行代码块
# 1.没有异常的情况下,整个代码块运行完毕后去触发__exit__,它的三个参数都为None
# 2.有异常的情况下,从异常出现的位置直接触发__exit__
#     a.如果__exit__的返回值为True,代表吞掉了异常
#     b.如果__exit__的返回值不为True,代表直接报异常
# 3.__exit__的运行完毕,代表了整个with语句的执行完毕.

#用途:
# 1.使用with语句的目的就是把代码放入with中执行,with结束后,自动完成清理工作,无须手动干预
# 2.在需要管理一些资源比如文件,网络链接和锁的编程环境,可以在__exit__中定制自动释放资源的机制,你无须再去关心这个问题.
原文地址:https://www.cnblogs.com/Anec/p/9796826.html