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