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
output:
entering
Есть ли способ заставить python автоматически вызывать метод context (__exit__
) () при прерывании цикла for
?Или какой-то другой способ достижения той же цели?То, что я знаю о генераторах и контекстных менеджерах, заставляет меня подозревать, что это невозможно, но это делает контекстные менеджеры довольно бесполезными внутри генераторов, не так ли?Мне кажется, что оператор yield
внутри блока with
должен поднимать красный флаг, менеджер контекста __exit__
может не работать .