The __iter__ method in MultiCallIterator is a generator, using the yield statement to produce results. As such it should simply return in the end, not raise any exception. Just remove the raise StopIteration line to correct this bug.
In addition, the entire method is unnecessary, as iter() can derive it from __len__ and __getitem__.