Newer
Older
class IteratorWithException:
"""Wraps a simple iterable (i.e. list) so that it throws a ValueError on a particular index."""
def __init__(self, iterable, throw_on_index):
self.max = len(iterable)
self.iterable = iter(iterable)
self.throw_indices = [index for index in throw_on_index if index < self.max]
def __iter__(self):
self.n = 0
return self
def __next__(self):
if self.n in self.throw_indices:
next(self.iterable)
self.n += 1
raise ValueError()
elif self.n == self.max:
raise StopIteration()
else:
self.n += 1
return next(self.iterable)
# python 3 compatibility