学习之上下文管理器

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__方法

相关推荐
星幻元宇VR7 分钟前
沉浸式体验:VR交通安全学习机的教育魅力
科技·学习·vr·虚拟现实
醇氧7 分钟前
Spring AI Alibaba 学习(一) 集成阿里云百炼大模型应用
java·学习·spring
nimadan127 分钟前
海螺口型同步2025解析,提升多设备协同效率的三大核心策略
人工智能·python
KIHU快狐7 分钟前
KIHU快狐|vr全景体验一体机高配置硬件带来更流畅操作体验
python
Nan_Shu_6149 分钟前
学习: 尚硅谷Java项目之小谷充电宝(4)
学习
阿轲Jackson10 分钟前
AttributeError: ‘WebDriver‘ object has no attribute ‘find_element_by_id‘
python·selenium
喵手17 分钟前
Python爬虫实战:Apple Music华语榜每日增量追踪与峰值计算!
爬虫·python·爬虫实战·零基础python爬虫教学·apply music·华语榜单·每日增量与峰值计算
71-318 分钟前
VMware没网的处理方式
笔记·学习
微露清风21 分钟前
系统性学习Linux-第五讲-基础IO
linux·运维·学习
風清掦22 分钟前
【江科大STM32学习笔记-08】DMA直接存储器存取
笔记·stm32·单片机·嵌入式硬件·学习