with 上下文管理
最后更新:2026-09-22
with 上下文管理
with 语句在进入和退出代码块时调用上下文管理器的 __enter__ / __exit__;常用于文件/锁/连接。
| 分类 | 关键字与语句 |
|---|---|
| 类型 | 关键字与语句 |
| Python 版本 | all |
📝 语法
with expr [as target]:
block
▶ 示例
编辑下方代码,点击运行,在输出面板查看结果:
运行结果:
closed: True
💡 提示 with 比 try/finally 更清晰,是官方推荐的资源管理方式。
💡 相关案例
更多实战案例即将上线,敬请期待。
❓ 常见问题
Q用 with 打开文件后还需要手动 close 吗?
A不需要。with 在退出代码块时会自动调用文件的 close()(通过 __exit__),即使中途抛异常也会关闭。这是官方推荐的资源管理写法。
Qwith 一次能管理多个资源吗?
A能。Python 3.10+ 可以写 with (open(a) as f1, open(b) as f2):;旧版本用嵌套 with,或用 contextlib.ExitStack 动态管理。
Qwith 后面的 as 变量在块外还能用吗?
A变量名还能访问(Python 没有块级作用域),但资源已经关闭。例如文件在 with 外再读写会报 ValueError: I/O operation on closed file。