函数形式
# 定义函数为上下文管理器
import contextlib
@contextlib.contextmanager
def open_func(file_name):
# __enter__ 方法
print('open file:', file_name, 'in __enter__')
file_handler = open(file_name, "r")
try:
# 重点:一定要使用yield
yield file_handler
except Exception as exc:
print('the exception was thrown')
finally:
# __exit__方法
print('close file:', file_name, 'in __exit__')
file_handler.close()
return
类形式
# 实现了__enter__和__exit__的方法,这个类的示例就是一个上下文管理器
class Resource:
def __enter__(self):
print("=== connect to resource ===")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
"""
捕获异常、自行处理异常
:param exc_type:异常类型
:param exc_val:异常值
:param exc_tb:异常的错误栈信息
:return: 默认为False, True --- 若有异常,不再抛出
"""
print("=== close resource connection ===")
def operate(self):
print("=== in operation ===")
网友评论