python-context
上下文管理器对象存在的目的是管理with
语句
with
语句的目的是简化 try/finally
模式。这种模式用于保证一段代码运行完毕后执行某项操作,即便那段代码由于异常、return
语句或 sys.exit()
调用而中止,也会执行指定的操作。`finally
子句中的代码通常用于释放重要的资源,或者还原临时变更的状态。
上下文管理器协议包含__enter__
和__exit__
两个方法,with
语句开始运行时,会在上下文管理器对象上吊用__enter__
方法,结束后会调用__exit__
方法
最常见的例子是确保关闭文件对象。使用 with 语句关闭文件1
2
3with open('a.txt','r') as f:
content = f.read()
print(content)
执行 with
后面的表达式得到的结果是上下文管理器对象,不过,把值绑定到目标变量上(as 子句)是在上下文管理器对象上调用 __enter__
方法的结果。不管控制流程以哪种方式退出 with 块,都会在上下文管理器对象上调用 exit 方法,而不是在 enter 方法返回的对象上调用。
如果 __exit__
方法返回True
之外的值,with 块中的任何异常都会向上冒泡。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SHIELD!
评论