同步上下文管理器和异步上下文管理器

class FileWriter:

def __init__(self, filename, mode='w'):

self.filename = filename

self.mode = mode

self.file = None

def __enter__(self):

# 进入 with 语句块时打开文件

self.file = open(self.filename, self.mode)

return self.file

def __exit__(self, exc_type, exc_val, exc_tb):

# 离开 with 语句块时关闭文件,并处理可能的异常

if self.file:

self.file.close()

# 如果返回 True,则表示异常已经被处理,不会向上传播

# 默认返回 None(即 False),表示异常需要向上传播

return False

# 使用示例

with FileWriter('example.txt') as f:

f.write('Hello, world!')

# 退出 with 块后,文件会自动关闭

# 也可以使用 contextlib 模块来简化创建上下文管理器

from contextlib import contextmanager

@contextmanager

def file_writer(filename, mode='w'):

file = open(filename, mode)

try:

yield file

finally:

file.close()

# 使用 contextmanager 装饰器创建的上下文管理器

with file_writer('example2.txt') as f:

f.write('Hello again!')

全部评论

相关推荐

12-15 10:15
复旦大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务