函數形式
# 定義函數為上下文管理器
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 ===")