итерация генератора в Питоне
Я сейчас изучаю генераторы Питона и у меня возник вопрос. Не ругайтесь сильно если он глупый. Суть: Я решил создать генератор (в учебных целях), объект которого после прохождения цикла в цикле for, снова будет готов проходить цикл for без создания нового объекта. Как я понимаю, цикл for завершает свою работу после улавливания исключения StopIteration. Поэтому моя функция генератора имеет вид:
def gen():
n = 0
while True:
yield n+1
n += 1
if n > 2:
n = 0
raise StopIteration
g = gen()
for i in g:
print(i)
Но в этом случае при первом же прохождении for не улавливает исключение SropItaration.
На выходе:
1
2
3
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\pythonProject1\main.py", line 8, in gen
raise StopIteration
StopIteration
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\pythonProject1\main.py", line 13, in <module>
for i in g:
RuntimeError: generator raised StopIteration
Почему? Как пофиксить?
Источник: Stack Overflow на русском