Я пытаюсь выполнить очистку в своем генераторе, но только если тело цикла вызвало исключение, а не завершено с break
:
def f():
for v in [1,2,99,4]:
try:
yield v
except GeneratorExit:
# how to determine whether generator exited via an exception?
print("generator exited")
raise
Однако я не нашелспособ узнать разницу между break
и exception
внутри итератора.
Т.е. будет выведен следующий код
for v in f():
if v == 99:
break
:
generator exited
И этот код
for v in f():
if v == 99:
raise Exception("boom")
будетвывод:
generator exited
---------------------------------------------------------------------------
Exception: boom
Таким образом, снаружи генератора разница заметна, но я не могу найти способ наблюдать это внутри корпуса генератора f()