标准库
Python内置的contextlib模块是核心工具库:
@contextmanager装饰器:用生成器函数快速创建上下文管理器
closing:为已有close()方法的对象添加上下文支持
suppress:在代码块中忽略指定异常
nullcontext:空上下文管理器,用于占位
ExitStack:管理多个动态上下文
@asynccontextmanager:创建异步上下文管理器
语言机制
任何实现__enter__()和__exit__()方法的对象都可用于with语句。Python标准库中许多对象如文件、线程锁、数据库连接都原生支持。
异步支持
Python 3.5+支持async with语句,需要实现__aenter__()和__aexit__()方法。Python 3.7+的contextvars模块管理异步任务中的状态隔离。
常见应用场景
数据库会话和事务管理
文件操作和临时资源清理
HTTP客户端连接管理
线程/进程同步锁
测试框架的资源管理
优势
确保资源正确释放
代码结构更清晰
异常处理更可靠
减少重复代码