学习之上下文管理器

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

相关推荐
喵手几秒前
Python爬虫实战:手把手教你如何采集开源字体仓库目录页(Google Fonts / 其他公开字体目录)!
爬虫·python·自动化·数据采集·爬虫实战·零基础python爬虫教学·开源字体仓库目录页采集
网络工程小王6 分钟前
【Python数据分析基础】
大数据·数据库·人工智能·学习
Chase_______16 分钟前
【Python 基础】第2章:流程控制完全指南(if/match/while/for)
python
第一程序员19 分钟前
Python高级特性详解:从基础到进阶
python·github
FluxMelodySun23 分钟前
机器学习(二十七) 降维:度量学习与随机梯度下降法求解
人工智能·学习·机器学习
wzhidev39 分钟前
04、Python核心数据类型详解:从一段诡异的调试说起
开发语言·python
wzhidev41 分钟前
05、Python流程控制与函数定义:从调试现场到工程实践
linux·网络·python
Thomas.Sir41 分钟前
第十一章:深入剖析 Prompt 提示工程
python·prompt
一尘之中41 分钟前
利用QPanda测试量子系统噪声:从理论到QAOA实践
学习·ai写作·量子计算
Fortune7942 分钟前
用Pandas处理时间序列数据(Time Series)
jvm·数据库·python