22 Jun
2001
22 Jun
'01
4:43 p.m.
Is "raise StopIteration" an abuse of exceptions? Why can we not use "return StopIteration" to signal the end of an iterator? I've done a bit of hacking and the idea seems to work. On possible problem is that the StopIteration object in the builtin module could cause some confusing behavior. For example the code: for obj in __builtin__.__dict__.values(): print obj would not work as expected. This could be fixed in most causes by changing the tp_iternext protocol. Something like: int tp_iternext(PyObject *it, PyObject **item) were the return value is 1, 0, or -1. IOW, StopIteration would not have to come into the protocol if the object implemented tp_iternext. Neil