[Python-Dev] Pre-PEP: Exception Reorganization for Python 3.0
Brett Cannon
bcannon at gmail.com
Sun Jul 31 00:59:38 CEST 2005
On 7/30/05, Nick Coghlan <ncoghlan at gmail.com> wrote:
> M.-A. Lemburg wrote:
> > The reason for my -1 on the renaming and reordering is
> > that it would completely break compatibility of Python 2.x
> > applications with Python 3. Furthermore, there would be next to
> > no chance of writing new applications that run in Python 3
> > and 2, so you have breakage in both directions.
> >
> > Whether this is desired or not is a different discussion,
> > I just want to point out some important things to consider:
> >
> > When moving from Python 2.x to 3.0, renaming could be solved
> > with the help of some scripts, grep et al. However, there
> > would have to be a good reason for each of these renamings,
> > otherwise this only introduces additional porting overhead.
> > Aliases might be a way to provide soft introduction.
> >
> > Something that scripts will not be able to help with are
> > changes in the inheritance tree, e.g. if an application
> > catches a ValueError, the programmer might also expect
> > UnicodeErrors to get caught, if the application catches
> > a TypeError, this may not be aware that the TypeError could
> > actually be an AttributeError.
>
> I think the problems with this can be minimised by avoiding making changes we
> don't need to. I think only a few changes are needed to get a significantly
> cleaner structure.
>
> Here's a fairly minimal proposal, which is closer to the existing 2.4 structure:
>
Nick, are you going go start subbing in for Tim when he is busy and
take my work that I spent hours on, come up with an alternative that
took 10 minutes, and have everyone end up loving your newfangled idea
10x more than my original? =)
> New Hierarchy
> =============
>
> Raisable (formerly Exception)
> +-- CriticalException (new)
> +-- KeyboardInterrupt
> +-- MemoryError
> +-- SystemError
> +-- ControlFlowException (new)
As I have said I am fine with moving ControlFlowException out to here,
but it depends if others agree.
> +-- GeneratorExit
> +-- StopIteration
> +-- SystemExit
Good point with SystemExit! I am definitely +1 on changing that inheritance.
> +-- Exception (formerly StandardError)
> +-- AssertionError
> +-- AttributeError
I am still up for moving AttributeError, but with the amount of
arguing going on between where it should go I am not going to be
shocked if we go with the status quo.
> +-- ImportError
> +-- TypeError
> +-- WeakReferenceError (formerly ReferenceError)
> +-- ArithmeticError
> +-- FloatingPointError
> +-- DivideByZeroError
> +-- OverflowError
> +-- EnvironmentError
> +-- OSError
> +-- WindowsError (possibly remove this from builtins)
If we are going to lack exceptions for other OSs, I say remove it. No
reason Windows should get special treatment with a built-in exception.
> +-- IOError
> +-- EOFError
> +-- LookupError
> +-- IndexError
> +-- KeyError
> +-- NameError
> +-- UnboundLocalError
What about UnboundGlobalError?
> +-- RuntimeError
I still don't like the name.
> +-- NotImplementedError
Interesting idea, but I don't view them as the same. Everyone uses
RuntimeError as a Poor Man's Exception, not as an actual runtime
error.
> +-- SyntaxError
> +-- IndentationError
> +-- TabError
> +-- ValueError
> +-- UnicodeError
> +-- UnicodeDecodeError
> +-- UnicodeEncodeError
> +-- UnicodeTranslateError
> +-- Warning
> +-- DeprecationWarning
> +-- FutureWarning
> +-- PendingDeprecationWarning
Don't like the idea of having DeprecationWarning inherit from
PendingDeprecationWarning?
-Brett
More information about the Python-Dev
mailing list