> I'm asking about why the behavior of a StopIteration exception being > handled from the `expression` of a generator expression to mean "stop > the loop" is accepted by "the devs" as acceptable.
I may be late to this discussion, but the answer is "most definitely yes". *Any* exception leads to termination of the iterator, and StopIteration is no different: py> def stop(e): ... def f(): ... raise e ... return f ... py> g = (f() for f in (lambda:1,stop(StopIteration),lambda:2)) py> g.next <method-wrapper 'next' of generator object at 0xb7960fac> py> g.next() 1 py> g.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <genexpr> File "<stdin>", line 3, in f StopIteration py> g.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration py> g = (f() for f in (lambda:1,stop(ValueError),lambda:2)) py> g.next() 1 py> g.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 1, in <genexpr> File "<stdin>", line 3, in f ValueError py> g.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration Regards, Martin -- http://mail.python.org/mailman/listinfo/python-list