自定义上下文管理器

函数形式
# 定义函数为上下文管理器
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 ===")
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容