Как сделать чтоб после блока try/except выводилось только одно исключение?

Есть такой вот "итератор":

class MyIterator():
    def __init__(self, lst):
        self.lst = lst
        self.counter = 0

    def __next__(self):
        try:
            z = self.lst[self.counter]
            self.counter += 2
            return z
        except:
            raise StopIteration

После ошибки он выводит это:

Traceback (most recent call last):
  File "C:/BookBot/test.py", line 10, in __next__
    z = self.lst[self.counter]
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/BookBot/test.py", line 22, in <module>
    print(next(x))
  File "C:/BookBot/test.py", line 14, in __next__
    raise StopIteration
StopIteration

Вопрос: как сделать чтоб при ошибке выводилось только StopIteration, и можно ли вообще так сделать?


Ответы (1 шт):

Автор решения: CrazyElf

А вы поймайте выше это исключение и выводите там, что хотите. А как именно "очистить" текущее состояние Exception в Python я что-то пока не нашёл:

import sys
try:
    x = MyIterator(list(range(10)))
    while True:
        print(next(x))
except:
    print("Unexpected error:", sys.exc_info()[0])

Вывод:

0
2
4
6
8
Unexpected error: <class 'StopIteration'>

Сама среда исполнения выводит по умолчанию всю трассировку исключений по цепочке, если вы не поймали исключение.

→ Ссылка