On Sun, 13 Dec 2009 14:35:21 +0000, exarkun wrote: >>StopIteration is intended to be used only within the .__next__ method of >>iterators. The devs know that other 'off-label' use results in the >>inconsistency you noted, but their and my view is 'don't do that'. > > Which is unfortunate, because it's not that hard to get StopIteration > without explicitly raising it yourself and this behavior makes it > difficult to debug such situations.
I can't think of any way to get StopIteration without explicitly raising it yourself. It's not like built-ins or common data structures routinely raise StopIteration. I don't think I've *ever* seen a StopIteration that I didn't raise myself. > What's with this view, exactly? Is it just that it's hard to implement > the more desirable behavior? What is that "more desirable behaviour"? That StopIteration is used to signal that Python should stop iterating except when you want it to be ignored? Unfortunately, yes, it's quite hard to implement "do what the caller actually wants, not what he asked for" behaviour -- and even if it were possible, it goes against the grain of the Zen of Python. If you've ever had to debug faulty "Do What I Mean" software, you'd see this as a good thing. -- Steven -- http://mail.python.org/mailman/listinfo/python-list