Как сделать чтоб после блока 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'>
Сама среда исполнения выводит по умолчанию всю трассировку исключений по цепочке, если вы не поймали исключение.