How come StopIteration.__base__ is not BaseException?

Terry Reedy tjreedy at udel.edu
Tue Aug 27 16:37:05 EDT 2013


On 8/27/2013 3:52 PM, Marco Buttu wrote:
> On 08/27/2013 08:51 PM, Terry Reedy wrote:
>
>> BaseException was added just so it would be possible to catch nearly
>> everything but a few exceptions. The first two were KeyboardInterrupt
>> and SystemExit (in 2.5). GeneratorExit was switched in 2.6, but I forget
>> the details of why.
>
> Maybe in order to don't catch it inside a generator using a except
> Exception clause, because it is used to notify an active generator is
> closed:
>
>  >>> def foogen():
> ...     for i in range(10):
> ...         try:
> ...             yield i
> ...         except:
> ...             print('Catched!')
> ...             # raise
> ...
>  >>> g = foogen()
>  >>> next(g)
> 0
>  >>> g.close()
> Catched!
> Traceback (most recent call last):
>    File "<stdin>", line 1, in <module>
> RuntimeError: generator ignored GeneratorExit
>
> Do you remember if this is the reason? Thanks,

I only remember that there was a 'problem' that necessitated a change in 
2.6 after the introduction in 2.5. The above seems reasonable.

-- 
Terry Jan Reedy




More information about the Python-list mailing list