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
ループが中断され__exit__たときに、python が context()のメソッドを自動的に呼び出すようにする方法はありますか? forまたは、同じ目的を達成するための他の方法はありますか? ジェネレーターとコンテキスト マネージャーについて私が知っていることから、それは不可能だと思われますが、これにより、ジェネレーター内でコンテキスト マネージャーが役に立たなくなりますね。私には、ブロックyield内のステートメントwithは赤いフラグを立てる必要があるようです。コンテキストマネージャー__exit__は実行されない可能性があります。