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在-loop 被中断__exit__
时自动调用 context() 的方法?for
或者其他实现相同目标的方法?我对生成器和上下文管理器的了解让我怀疑这是不可能的,但这使得上下文管理器在生成器内部相当无用,不是吗?在我看来,块yield
内的语句with
应该引发红旗,上下文管理器__exit__
可能无法运行。