Python 中的上下文管理器
with expression [as target]:
with-body
上下文管理器是为with 语句而生。只要实现了上下文管理器协议__enter__
与__exit__
,就可以使用with语句。
__enter__
通常执行一些初始化操作,并且该函数的返回值会赋值给可选的 as target
中的target
变量。
__exit__
执行资源清理工作。它接收三个参数,异常类型,异常实例,和异常栈,根据这些异常信息,__exit__
可以选择进行相应的异常处理,并默认抛出异常。如果我们在让__exit__
返回True,相当于告诉python:这些异常我都已经处理了,都在掌控之中,您老不必操心。
除了自定义类手动实现两个特殊方法外,还有另一种途径实现一个上下文管理器。
标准库contextlib
中提供了一个@contextmanager
可以方便的把一个