[Python-Dev] Pre-PEP: Exception Reorganization for Python 3.0

Brett Cannon bcannon at gmail.com
Sun Jul 31 04:23:39 CEST 2005


On 7/30/05, Nick Coghlan <ncoghlan at gmail.com> wrote:
> Phillip J. Eby wrote:
> > I like this a lot, and a good bit of it could actually be done in 2.5,
> > apart from the Exception/StandardError move, assuming also that the
> > renamed errors were also available under their old names.  We could
> > probably go so far as to add Raisable to the hierarchy, but I don't
> > think we could actually get quite to your proposed structure without
> > breaking any programs.  On the other hand, if we introduce
> > CriticalException and ControlFlowException in 2.5 (inheriting from
> > Exception), and create a new Error base for StandardError, then promote
> > subclassing and catching it instead of Exception, then there will be
> > less to do in 3.0.  So, my thoughts for the 2.x series are:
> >
> >
> >    Exception
> >       CriticalException
> >       ControlFlowException
> >       Error
> >          StandardError
> 
> If we leave Exception at the top of the hierarchy for Py3k, and use Error to
> replace StandardError, the hierarchy could look like this:
> 
>   Exception
>   +-- ControlFlowException (new)
>        +-- GeneratorExit
>        +-- KeyboardInterrupt
>        +-- StopIteration
>        +-- SystemExit
>   +-- CriticalError (new)
>        +-- MemoryError
>        +-- SystemError
>   +-- Error (formerly StandardError)
>        +-- AssertionError
>        +-- AttributeError
>        +-- ImportError
>        +-- TypeError
>        +-- WeakReferenceError (formerly ReferenceError)
> 
> I wouldn't mind using Exception/Error instead of Raisable/Exception - and it
> seriously reduces the pain of making this transition. Indeed, most of it
> becomes doable within the 2.x series - the only tricky parts are semantic
> changes involved with moving the KeyboardInterrupt, MemoryError and
> SystemError out from under StandardError, and moving EOFError under IOError.
> 

I can live with this, but that will require Guido's stamp of approval.

> So the question is whether or not the Raisable/Exception combination is liked
> enough that we want to dance through the requisite hoops to get there.
> 
> Notice that I've classified KeyboardInterrupt as user-initiated control flow
> and put it under ControlFlowException above. This means that everything under
> CriticalError and Error actually ends with the word 'Error'.
> 

I don't know if I like this change in inheritance.  While we do tend
to use KeyboardInterrupt as a way to kill a program, is that really
control flow, or a critical exception that the program needs to stop
because an serious event occurred?

I prefer the latter explanation.

-Brett


More information about the Python-Dev mailing list