contextmanager装饰器
虽然上下文管理器很好用,但定义一个符合协议的管理器对象其实挺麻烦的
得首先创建一个类,然后实现好几个魔法方法。为了简化这部分工作,python
提供了一个非常好用的工具:@contextmanager装饰器
@contextmanager位于内置模块contextlib下,它可以把任何一个生成器函数
直接转换为一个上下文管理器
举个例子,实现一个自动关闭连接的数据库上下文管理器
from contextlib import contextmanager
@contextmanager
def create_conn_obj(host, port, timeout=None):
conn = create_conn(host, port, timeout=timeout)
try:
yield conn # 1
finally: # 2
conn.close()
1.以yield关键字为界,yield前的逻辑会在进入管理器时执行(类似于__enter__)。yield后的逻辑会在退出管理器时执行(类似于__exit__)
2.如果要在上下文管理器内处理异常,必须用try语句块包裹yield语句
-------------------------------------------
个性签名:代码过万,键盘敲烂!!!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!