python——上下文管理器

拼搏现实的明天。 2022-12-08 14:17 250阅读 0赞

####基于生成器实现的上下文管理器

  1. from contextlib import contextmanager
  2. #生成器
  3. @contextmanager
  4. def file_manager(name,mode):
  5. try:
  6. f = open(name,mode,encoding="utf-8")#打开文件
  7. yield f#生成器
  8. finally:
  9. f.close()
  10. with file_manager("1.txt","w") as f:
  11. f.write("hello world")

####基于类实现的上下文管理器

  1. class FKResouce:
  2. def __init__(self,tag):
  3. self.tag = tag
  4. print("构造器,初始化资源:%s" % tag)
  5. def __enter__(self):
  6. print('[__enter__%s]:' % self.tag)
  7. #返回值作为as字句中变量
  8. return 'fkit'
  9. def __exit__(self,exc_type,exc_value,exc_traceback):
  10. print('[__exit__%s]:' % self.tag)
  11. #exc_traceback为None,代表无异常
  12. if exc_traceback is None:
  13. print("没有异常时关闭资源")
  14. else:
  15. print("遇到异常时关闭资源")
  16. return False
  17. with FKResouce('孙武') as dr:
  18. print(dr)
  19. print('[with代码块],无异常')
  20. print("__________________________")
  21. with FKResouce("ha"):
  22. print("[with代码块]异常之前的代码")
  23. raise Exception
  24. print("异常之后的代码")

发表评论

表情:
评论列表 (有 0 条评论,250人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Python上下文管理

    1. 上下文管理器 一个类只要实现了 `__enter__()` 和 `__exit__()` 这个两个方法,通过该类创建的对象我们就称之为上下文管理器。 上下文管理器

    相关 python上下文管理

    上下文管理器允许你在有需要的时候,精确地分配和释放资源。 使用上下文管理器最广泛的案例就是`with`语句了。 想象下你有两个需要结对执行的相关操作,然后还要在它们中间放

    相关 Python深入 上下文管理

    上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围。一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分