Prev: Spawning an interactive interpreter in a running python process?
Next: unable to read the __main__ namespace
From: Martin v. Loewis on 2 Jan 2010 15:27 > 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 |