Jacob Holm wrote:
The "GeneratorExit", I expect due to the description of close in PEP 342:
def close(self): try: self.throw(GeneratorExit) except (GeneratorExit, StopIteration): pass else: raise RuntimeError("generator ignored GeneratorExit")
When the generator is closed (due to the del g lines in the example), this says to throw a GeneratorExit and handle the result. If we do this manually, the throw will be delegated to the iterator, which will print the "Throw: (<type 'exceptions.GeneratorExit'>,)" message.
It turns out I was wrong about the GeneratorExit. What I missed is that starting from 2.6, GeneratorExit no longer subclasses Exception, and so it wouldn't be thrown at the iterator. So move along, nothing to see here ... :) - Jacob