Python的with关键字

技术笔记

在 python 编程里,常常需要进行资源管理,而 with 关键字为我们提供了一种优雅的方式来处理文件操作,数据库连接等等需要释放资源的场景。 with 是 python 中的关键字,用于上下文管理协议,它简化了资源管理代码,特别是那些需要明确释放和清理的资源,如文件管理,数据库,网络连接。

传统资源管理

需要使用try-finally块进行close()操作,需要手动处理文件异常,代码内容繁杂

file = open('demo.txt', 'r')  
try:  
    content = file.read()  
finally:  
    file.close()

with 的优势

资源自动释放,文件异常资源也会正常释放,代码内容简洁

with open('demo.txt', 'r', encoding='utf-8') as f:  
    content = f.read()  
    print(content)

with 语句的原理

上下文管理协议是 with的基础,该协议要求对象实现两个方法

  • __enter__():进入上下文时调用,返回值赋给 as 后的变量
  • __exit__():退出上下文时调用,处理清理工作

异常处理机制是with的特殊之处,__exit__() 方法接收三个参数 - exc_type:异常类型 - exc_val:异常值 - exc_tb:异常追踪信息

如果 __exit__() 返回 True,则表示异常已被处理,不会继续传播;返回 False 或 None,异常会继续向外传播

with 的最佳应用场景

  1. 优先使用 with 管理资源:对于文件、网络连接、锁等资源,总是优先考虑使用 with 语句
  2. 保持上下文简洁with 块中的代码应该只包含与资源相关的操作
  3. 合理处理异常:在自定义上下文管理器中,根据需求决定是否抑制异常
  4. 利用多个上下文:Python 允许在单个 with 语句中管理多个资源
返回列表