美文网首页
python的上下文管理器

python的上下文管理器

作者: 蒲编 | 来源:发表于2017-05-20 10:51 被阅读0次

上下文管理器可以用来包装任意格式的代码块,被用得最多地方就是,作为确保资源被正确清理的一种方式。

with open('/path/to/file', 'r') as f:
    f.read()

本质上讲,with语句是对其后面的代码进行求值,open表达式会返回一个对象,该对象包含两个方法,__enter____exit__

class Database(object):

    ...

    def __enter__(self):
        self.connect()
        return self

    def __exit__(self, exc_type, exc_instance, traceback):
        self.close()

__enter__方法只接受self参数,而__exit__方法还接受异常类型,异常实例和回溯选择(如果没有发生异常,则三个位置参数都是None)。

需要注意的是,只有__enter__的返回值会赋值给as后面的变量。
还有,__exit__方法只是向流程链上传播一场,这是通过返回False实现的,根本不需要与实例进行交互。

我们可以编写自己的上下文管理器。__enter__方法负责执行一些配置,__exit__方法则一般负责异常处理,资源清理等情况。

一般把上下文管理器视为try-except的替代品,而上下文管理器有价值的应用之一是必须在except子句中完成的工作很重要,且在应用程序中多处复用的情况。

  • contextlib
    可以用contextlib库简化构建上下文管理器的代码,例如:
from contextlib import contextmanager

@contextmanager
def tag(name):
    print("<%s>" % name)
    yield
    print("</%s>" % name)

with tag("h1"):
    print("hello")
    print("world")

tag里yield之前的就在with代码块之前发生,之后的同理。

相关文章

  • Python上下文管理器和with块

    python中with语句用起来很方便,那这后边的原理就是python中的上下文管理器。 1.什么是上下文管理器 ...

  • 算法面试 - 问题记录

    python上下文管理器,装饰器? (1)上下文管理器知乎链接:https://zhuanlan.zhihu.co...

  • python 上下文管理器

    一、什么是上下文管理器? 上下文管理器类型是python的内置类型之一,上下文管理器的定义:允许用户自定义类来定义...

  • python上下文管理

    什么是上下文管理 上下文:context的直译, 指的是代码执行过程中的前后状态上下文管理器:python上下文管...

  • Python上下文管理器

    Context Manager 文档翻译 Python with语句支持上下文管理器定义的运行时上下文概念(run...

  • Tornado源码分析(二)异步上下文管理(StackConte

    异步异常与上下文 在Python黑魔法---上下文管理器最后关于上下文的使用,提到了tornado的处理方式。本篇...

  • python 基础深入

    contextlib 上下文管理器 创建上下文管理实际就是创建一个类,添加enter和exit方法 Python...

  • Python上下文管理器

    上下文管理器 概念:实现了上下文协议的对象即为上下文管理器。 上下文管理器的协议: __enter__进入的方法_...

  • python中上下文管理器

    什么是上下文管理器? 代码的环境就是上下文,实现了上下文管理器协议的类产生的实例就是上下文管理器对象。在类中声名e...

  • Python:上下文管理器 与 contextlib 的用法解析

    1. 上下文管理器 1.1. 引言 在 python 语言中经常会使用 with ... as ... 语句,...

网友评论

      本文标题:python的上下文管理器

      本文链接:https://www.haomeiwen.com/subject/ajauxxtx.html