On Tue, Oct 13, 2015 at 11:26:09AM -0400, Random832 wrote:
> "R. David Murray" <[email protected]> writes:
>
> > On Tue, 13 Oct 2015 14:59:56 +0300, Stefan Mihaila
> > <[email protected]> wrote:
> >> Maybe it's just python2 habits, but I assume I'm not the only one
> >> carelessly thinking that "iterating over an input a second time will
> >> result in the same thing as the first time (or raise an error)".
> >
> > This is the way iterators have always worked.
>
> It does raise the question though of what working code it would actually
> break to have "exhausted" iterators raise an error if you try to iterate
> them again rather than silently yield no items.
Anything which looks like this:
for item in iterator:
if condition:
break
do_this()
...
for item in iterator:
do_that()
If the condition is never true, the iterator is completely processed by
the first loop, and the second loop is a no-op by design.
I don't know how common it is, but I've written code like that.
Had we been designing the iterator protocol from scratch, perhaps we
might have had two exceptions:
class EmptyIterator(Exception): ...
class StopIteration(EmptyIterator): ...
and have StopIteration only raised the first time you call next() on an
empty iterator. But would it have been better? I don't know. I suspect
not. I think that although it might avoid a certain class of errors, it
would add complexity to other situations which are currently simple.
--
Steve
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com