学习之上下文管理器

python 复制代码
one_file = open('demo.txt', 'w')
one_file.write("xxxxx")
# raise ValueError  # 如果抛出异常将会报错
one_file.close()
python 复制代码
with open('demo.txt', 'w') as f:  # open--返回的是IO--IO中实现了__enter__方法和__exit__方法
    f.write("aaaa")
python 复制代码
class MyContextManger:
    def __init__(self, filename, mode, encoding='utf-8'):
        self.filename, self.mode, self.encoding = filename, mode, encoding

    def __enter__(self):
        self.file_obj = open(self.filename, mode=self.mode, encoding=self.encoding)
        return self.file_obj

    def __exit__(self, exc_type, exc_val, exc_tb):  # 如果with语句出现异常的时候会接收
        # exc_type:异常的类型
        # exc_val:异常的值
        # exc_tb:异常的回溯
        # 如果返回None,则表示上下文管理器自己处理异常,即我们认为异常已经处理完毕了,Python解释器不会将异堂传递给上层代码。
        # 如果返回True,则表示上下文管理器已经成功处理了异常,并且异常已经被处理完毕了,Python解释器不会将弃常传递给上层代码。
        # 如果返回False或其他任意非空值,则表示上下文管理器没有成功处理异常,Python解释器会将异常传递给上层代码继续处理。
        self.file_obj.close()


if __name__ == '__main__':
    with MyContextManger("demo.txt", "w") as mm:  # MyContextManger()创建对象会直接调用__init__方法
        mm.write("sssss")

with上下文管理器就是实现了 enter,__exit__方法

相关推荐
weixin_4440129313 小时前
SQL处理大规模分组聚合的内存限制_调整服务器配置.txt
jvm·数据库·python
knight_9___13 小时前
大模型project面试5
人工智能·python·深度学习·面试·agent·rag·mcp
剑客自媒体13 小时前
社保卡照片怎么用手机上传?尺寸和背景色有什么要求?
python·智能手机
_Evan_Yao13 小时前
从“全量发布”到“小步快跑”:灰度发布的简单实践与学习路径
java·后端·学习
如竟没有火炬13 小时前
至少有K个重复字符的最长子串
开发语言·数据结构·python·算法·leetcode·动态规划
李白不吃坚果13 小时前
沟道电荷注入的思考
学习·cmos·模拟集成电路·开关·沟道电荷注入
wyw000013 小时前
FFmpeg实现带颜色MXF转mp4
python·ffmpeg
knight_9___13 小时前
大模型project面试6
人工智能·python·agent·rag·mcp
2401_8676239813 小时前
SQL如何提取分组中的第一条记录_使用ROW_NUMBER定位数据
jvm·数据库·python
三品吉他手会点灯13 小时前
C语言学习笔记 - 32.嵌入式C语言学习阶段对初学编程者的建议
c语言·开发语言·笔记·学习