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-loop被中断时自动调用context()的-loop方法?还是用其他方法来达到同样的目的?我对生成器和上下文管理器的了解让我怀疑这是不可能的,但这使得上下文管理器在生成器中变得非常无用,不是吗?在我看来,在一个__exit__块中的yield语句应该会发出一个红旗,上下文管理器可能不会运行。
发布于 2011-06-01 15:25:27
好的,您可以在try()函数中用try/finally子句包装产生的结果:
from contextlib import contextmanager
@contextmanager
def context():
print "entering"
try:
yield
finally:
print "exiting"
def test():
with context():
for x in range(10):
yield x
for x in test():
if x == 5:
break # or raise产出:
entering
exiting如果您尝试一个:help(contextmanager),,它将显示它是一个“典型的”使用示例,其中他们用一个/子句来包装收益。
https://stackoverflow.com/questions/6203300
复制相似问题