python contextManager详解

原创 2016年08月29日 16:16:00
contextlib.contextmanager(func)

This function is a decorator that can be used to define a factory function for with statement context managers, without needing to create a class or separate __enter__() and __exit__() methods.

A simple example (this is not recommended as a real way of generating HTML!):

from contextlib import contextmanager

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

>>> with tag("h1"):
...    print "foo"
...
<h1>
foo
</h1>

The function being decorated must return a generator-iterator when called. This iterator must yield exactly one value, which will be bound to the targets in the with statement’s as clause, if any.

At the point where the generator yields, the block nested in the with statement is executed. The generator is then resumed after the block is exited. If an unhandled exception occurs in the block, it is reraised inside the generator at the point where the yield occurred. Thus, you can use a try...except...finally statement to trap the error (if any), or ensure that some cleanup takes place. If an exception is trapped merely in order to log it or to perform some action (rather than to suppress it entirely), the generator must reraise that exception. Otherwise the generator context manager will indicate to the with statement that the exception has been handled, and execution will resume with the statement immediately following the with statement.

相关文章推荐

Python中的高级设计模式

本文展示一些高级的Python设计结构和它们的使用方法。在日常工作中,你可以根据需要选择合适的数据结构,例如对快速查找性的要求、对数据一致性的要求或是对索引的要求等,同时也可以将各种数据结构合适地结合...

@contextmanager:Python实现with结构的好方法

常见with结构常见的with结构是在进行文件操作时,比如# 中规中矩的写法 f = open("test.txt", "w") f.write("hello world!") f.close()# ...

十六、Python 上下文管理 Context Manager

要使用 with 语句,首先要明白上下文管理器这一概念。有了上下文管理器,with 语句才能工作。下面是一组与上下文管理器和with 语句有关的概念。 上下文管理协议(Context Managem...

python装饰器、with和contextmanager

1,装饰器:  装饰器是一种简单的记号而已,有如下等价的转换规则(带不带参数的装饰器都一样,只要是一个可调用对象即可)。 @foo def bar:     pass 等价于: x = f...

Python标准模块--ContextManager(上下文管理器)

Python标准模块--ContextManager 1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with。with语句允许开发者创建上下文管理器。什么是上下...

Android Binder机制(2) ContextManager注册过程分析

Context Manager对应的进程为servicemanager,它先于Service Server与服务客户端运行,首先进入接收IPC数据的状态,处理来自Service Server或服务客户...

Python开发技术详解3

  • 2015年01月07日 22:39
  • 16.56MB
  • 下载

Python对Excel操作详解

  • 2016年09月13日 16:48
  • 251KB
  • 下载

Python中模块使用详解

1.我想知道python中有哪些模块,如何查看呢? https://docs.python.org/2.7/py-modindex.html#cap-s 2.举个使用的例子吧 请阅读string模块...

Python开发技术详解.part2.rar

  • 2013年05月19日 11:36
  • 49.75MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python contextManager详解
举报原因:
原因补充:

(最多只允许输入30个字)