Junior — Middle
91
Jakie przyczyny mogą spowodować, że pętla for w Pythonie nie zakończy się automatycznie po wyczerpaniu iteratora z wyjątkiem StopIteration?
Odpowiedź od 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 при исчерпании элементов, и этот исключение не должно быть перехвачено внутри цикла.