【发布时间】:2011-06-01 15:00:48
【问题描述】:
from contextlib import contextmanager
@contextmanager
def context():
print "entering"
yield
print "exiting"
def test():
with context():
for x in range(10):
yield x
for x in test():
if x == 5:
break # or raise
输出:
entering
有没有办法让python在for循环中断时自动调用context()的__exit__方法?或者其他实现相同目标的方法?我对生成器和上下文管理器的了解让我怀疑这是不可能的,但这使得上下文管理器在生成器内部相当无用,不是吗?在我看来,with 块内的 yield 语句应该引发危险信号,上下文管理器 __exit__ 可能无法运行。
【问题讨论】:
标签: python generator contextmanager