[Python-Dev] Re: PEP 279
Guido van Rossum
guido@python.org
Sat, 30 Mar 2002 13:53:51 -0500
> I had a bit of confusion that there's not StopIteration traceback printed,
> and neither is "after that". Apparently an uncaught StopIteration call
> just exits silently? (I'm using 2.3a0 here, in the case that it
> matters---cvs from 2-3 weeks ago)
Is this about the example below?
> from __future__ import generators
>
> class HaltingIterator:
> def __init__(self, *args, **kw):
> self._stop = 0
> self._generator = self.generator(*args, **kw)
>
> def stop(self, arg=1):
> self._stop = arg
> self.cleanup(arg)
>
> def next(self):
> if self._stop:
> raise StopIteration
> return self._generator.next()
>
> def cleanup(self, arg): pass
>
>
> class ExampleHaltingIterator(HaltingIterator):
> def generator(self):
> a, b = 1, 1
> while 1:
> ret = a
> ret, a, b = a, b, a+b
> yield ret
>
> def cleanup(self, arg):
> print "halted with", arg
>
> x = ExampleHaltingIterator()
>
> for i in range(10): print x.next()
> x.stop("76 trombones")
> print x.next()
> print "after that"
With current CVS this prints:
1
1
2
3
5
8
13
21
34
55
halted with 76 trombones
Traceback (most recent call last):
File "/tmp/x.py", line 35, in ?
print x.next()
File "/tmp/x.py", line 14, in next
raise StopIteration
StopIteration
--Guido van Rossum (home page: http://www.python.org/~guido/)