目录
[2.with 语句的工作流程](#2.with 语句的工作流程)
[3. 自定义上下文管理器](#3. 自定义上下文管理器)
[4. enter 和 exit 方法详解](#4. enter 和 exit 方法详解)
[5. 示例](#5. 示例)
with语句用于简化资源管理,确保资源在使用后得到适当的清理。它通过上下文管理器(context manager)来实现这一点。- 上下文管理器是实现了
__enter__和__exit__方法的对象。with上下文管理可以自动管理资源,在with代码块执行完毕后自动还原进入该代码之前的现场或上下文。不论何种原因跳出with块,不论是否有异常,总能保证资源正常释放。极大的简化了工作,在文件操作、网络通信相关的场合非常常用1.基本概念
- 上下文管理器:一个对象,它定义了资源的获取和释放逻辑。
with语句:语法结构,用于管理上下文,即资源的打开和关闭。
2.with语句的工作流程
__enter__方法 :在with语句块开始时调用。它可以用于资源的初始化和准备。此方法的返回值可以被赋值给as后的变量。__exit__方法 :在with语句块结束时调用,无论是正常结束还是由于异常结束。它负责清理资源并可以处理异常。例子:
pythonwith open('file.txt', 'r') as file: content = file.read() # 文件会在 with 块结束时自动关闭,无需显式调用 file.close()3. 自定义上下文管理器
pythonclass MyContextManager: def __enter__(self): print("Entering the context") # 初始化资源,通常返回自己或其他有用的对象 return self def __exit__(self, exc_type, exc_value, traceback): print("Exiting the context") # 处理异常,返回 True 表示异常被处理,返回 False 让异常继续传播 return False # 使用自定义上下文管理器 with MyContextManager() as manager: print("Inside the context") # 在这里你可以触发异常来测试 __exit__ 方法4.
__enter__和__exit__方法详解
__enter__方法:
- 该方法在
with语句块开始时被调用。- 通常用于初始化资源并可以返回一个对象(通常是
self或某个资源)。
__exit__方法:
- 该方法在
with语句块结束时被调用。- 它接受四个参数:
exc_type(异常类型)、exc_value(异常值)、traceback(异常回溯)。- 它负责清理资源,并且可以处理异常。
- 如果
__exit__返回True,异常会被视为处理过,不会向上传播;如果返回False,异常会继续传播。5. 示例
- 文件操作
pythonwith open('file.txt', 'w') as file: file.write('Hello, world!')
- 数据库连接
pythonclass DatabaseConnection: def __enter__(self): # 连接到数据库 return self def __exit__(self, exc_type, exc_value, traceback): # 关闭数据库连接 pass with DatabaseConnection() as db: db.execute("SELECT * FROM table")
第二十一讲 python中的with上下文资源管理器
还是那个同伟伟2024-08-20 18:31
相关推荐
ZH15455891317 分钟前
Flutter for OpenHarmony Python学习助手实战:GUI桌面应用开发的实现B站计算机毕业设计超人12 分钟前
计算机毕业设计Hadoop+Spark+Hive招聘推荐系统 招聘大数据分析 大数据毕业设计(源码+文档+PPT+ 讲解)B站计算机毕业设计超人13 分钟前
计算机毕业设计hadoop+spark+hive交通拥堵预测 交通流量预测 智慧城市交通大数据 交通客流量分析(源码+LW文档+PPT+讲解视频)CodeSheep程序羊18 分钟前
拼多多春节加班工资曝光,没几个敢给这个数的。独好紫罗兰19 分钟前
对python的再认识-基于数据结构进行-a002-列表-列表推导式机器学习之心HML21 分钟前
多光伏电站功率预测新思路:当GCN遇见LSTM,解锁时空预测密码,python代码2401_8414956423 分钟前
【LeetCode刷题】二叉树的直径王大傻092826 分钟前
python 读取文件可以使用open函数的 r 模式JarryStudy27 分钟前
HCCL与PyTorch集成 hccl_comm.cpp DDP后端注册全流程woshikejiaih40 分钟前
**播客听书与有声书区别解析2026指南,适配不同场景的音频