Junior — Middle
93
Ce motive pot face ca un ciclu for în Python să nu se încheie automat atunci când iteratorul se epuizează cu excepția StopIteration?
Răspuns de la AI
sobes.tech AI
Цикл for в Python автоматически завершится, когда итератор выбросит исключение StopIteration. Если этого не происходит, возможны следующие причины:
- Итератор не реализует корректно протокол итератора, и
StopIterationне выбрасывается при достижении конца. - Внутри цикла
forпроисходит перехват исключенияStopIteration, что мешает циклу корректно завершиться. - Используется объект, который не является итератором, а, например, генератор или другой объект с методом
__iter__, который возвращает бесконечный итератор.
Пример неправильной реализации итератора, который никогда не выбрасывает StopIteration:
class InfiniteIterator:
def __iter__(self):
return self
def __next__(self):
return 1 # Никогда не выбрасываем StopIteration
for i in InfiniteIterator():
print(i) # Этот цикл не завершится автоматически
Таким образом, чтобы цикл for завершался, итератор должен корректно выбрасывать StopIteration при исчерпании элементов, и этот исключение не должно быть перехвачено внутри цикла.