1、概念
上下文管理协议(Context Management Protocol):包含enter() 和exit() 方法,支持该协议的对象要实现这两个方法
上下文管理器(Context Manager):支持上下文管理协议的对象
使用 with 语句调用上下文管理器,来构建对资源的自动创建和释放
2、with 语句基本语法
with expression [as variable]:
with-block
3、上下文管理器
class Context:
def __enter__(self):
print("enter方法")
def __exit__(self, exc_type, exc_val, exc_tb):
print("exit方法")
with Context() as c:
print(c)
执行原理如下:
1、执行 Context(),返回一个上下文管理器对象
2、自动调用上下文管理器的enter方法,如果使用了 as 子句,则将enter() 方法的返回值赋值给 as 子句中的 c
3、执行 with 中的代码块
4、不论执行过程中是否发生异常,都会执行上下文管理器中的exit() 方法,exit 方法负责清理工作。如果执行过程中没有异常,则以 None 作为参数调用exit;
如果执行过程中发生了异常,则使用exit(exc_type, exc_val, exc_tb) 调用