Python 进阶——什么是上下文管理器

错误读取文件

# 打开文件
f = open('file.txt')
for line in f:
    # 读取文件内容 执行其他操作
    # do_something...
# 关闭文件
f.close()

java思维读取文件

f = open('file.txt')
try:
    for line in f:
        # 读取文件内容 执行其他操作
        # do_something...
finally:
    # 保证关闭文件
    f.close()

使用with读取文件

with open('file.txt') as f:
    for line in f:
        # do_something...

上下文管理器语法

with context_expression [as target(s)]:
 with-body

一个类在 Python 中,只要实现以下方法,就实现了「上下文管理器协议」:
enter:在进入 with 语法块之前调用,返回值会赋值给 with 的 target
exit:在退出 with 语法块时调用,一般用作异常处理

contextlib模块可简化上下文管理器协议


from contextlib import contextmanager
@contextmanager
def test():
    print('before')
    yield 'hello'
    print('after')
with test() as t:
    print(t)
# Output:
# before
# hello
# after

你可能感兴趣的:(Python 进阶——什么是上下文管理器)