Как работают Итераторы Любая последовательность, такая как list, dict, sets, является итерируемой. То есть мы можем делать прогон по элементам. Например с помощью цикла For: Но как это работает? Для итерируемых последовательностей существует метод iter(), который позволяет получить итератор. А итератор в свою очередь имеет метод next() позволяющий получить следующий элемент. Попробуем проитерировать список "руками". Для этого создадим итератор, который принимает в себя последовательность и выведем значения с помощью next(): Но что произойдет, если попробовать вывести следующее значение, которого не существует, так как список кончился? Произойдет исключение: StopIteration Оно является командной для итератора, что нужно прекратить итерирование. То есть, когда мы делаем прогон по элементам последовательности циклом For, то это равноценно циклу While, в котором исключение StopIteration обернуто в обработчик исключений и прекращает выполнение цикла: Свой собственный итератор Можно созда