Не оценивая весь ваш подход, но в целом, если вам нужны произвольные изменения состояния в счетчике, вы можете написать свой собственный итератор:
class Cursor:
def __init__(self, start, end):
self.end = end
self.position = start
def __next__(self):
if self.position >= self.end:
raise StopIteration
else:
self.position += 1
return self.position - 1
def __iter__(self):
return self
def revert(self, n=1):
self.position -= n + 1
Пример:
if __name__ == '__main__':
cursor = Cursor(6, 16)
it = iter(range(3, -20, -1)) # for demo
for i in cursor:
print(i)
try:
i / next(it)
except ZeroDivisionError:
print("Error on:", i)
cursor.revert(1)
Выход:
6
7
8
9
Error on: 9
8
9
10
11
12
13
14
15
Process finished with exit code 0