2005-08-03 23:18:57 -04:00
|
|
|
|
PEP: 348
|
|
|
|
|
Title: Exception Reorganization for Python 3.0
|
|
|
|
|
Version: $Revision$
|
|
|
|
|
Last-Modified: $Date$
|
|
|
|
|
Author: Brett Cannon <brett@python.org>
|
2005-08-26 02:01:04 -04:00
|
|
|
|
Status: Rejected
|
2005-08-03 23:18:57 -04:00
|
|
|
|
Type: Standards Track
|
|
|
|
|
Content-Type: text/x-rst
|
|
|
|
|
Created: 28-Jul-2005
|
2005-08-09 00:26:28 -04:00
|
|
|
|
Post-History:
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
.. |2.x| replace:: 2.5
|
|
|
|
|
|
2012-10-06 00:52:39 -04:00
|
|
|
|
.. note:: This PEP has been rejected [#rejected]_.
|
2005-08-26 02:01:04 -04:00
|
|
|
|
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
Abstract
|
|
|
|
|
========
|
|
|
|
|
|
2005-08-15 00:28:28 -04:00
|
|
|
|
Python, as of version 2.4, has 38 exceptions (including warnings) in
|
|
|
|
|
the built-in namespace in a rather shallow hierarchy. These
|
|
|
|
|
classes have come about over the years without a chance to learn from
|
2005-08-07 00:14:04 -04:00
|
|
|
|
experience. This PEP proposes doing a reorganization of the hierarchy
|
|
|
|
|
for Python 3.0 when backwards-compatibility is not as much of an
|
2005-08-15 00:28:28 -04:00
|
|
|
|
issue.
|
|
|
|
|
|
|
|
|
|
Along with this reorganization, adding a requirement that all
|
2005-08-05 01:31:44 -04:00
|
|
|
|
objects passed to a ``raise`` statement must inherit from a specific
|
2005-08-15 00:28:28 -04:00
|
|
|
|
superclass is proposed. This is to have guarantees about the basic
|
|
|
|
|
interface of exceptions and to further enhance the natural hierarchy
|
|
|
|
|
of exceptions.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
Lastly, bare ``except`` clauses will be changed to be semantically
|
|
|
|
|
equivalent to ``except Exception``. Most people currently use bare
|
|
|
|
|
``except`` clause for this purpose and with the exception hierarchy
|
|
|
|
|
reorganization becomes a viable default.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-15 00:28:28 -04:00
|
|
|
|
|
|
|
|
|
Rationale For Wanting Change
|
|
|
|
|
============================
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
Exceptions are a critical part of Python. While exceptions are
|
|
|
|
|
traditionally used to signal errors in a program, they have also grown
|
2005-08-07 00:14:04 -04:00
|
|
|
|
to be used for flow control for things such as iterators.
|
|
|
|
|
|
2005-08-15 00:28:28 -04:00
|
|
|
|
While their importance is great, there is a lack of structure to them.
|
2005-08-07 00:14:04 -04:00
|
|
|
|
This stems from the fact that any object can be raised as an
|
|
|
|
|
exception. Because of this you have no guarantee in terms of what
|
2012-10-06 00:52:39 -04:00
|
|
|
|
kind of object will be raised, destroying any possible hierarchy
|
2005-08-07 00:14:04 -04:00
|
|
|
|
raised objects might adhere to.
|
|
|
|
|
|
|
|
|
|
But exceptions do have a hierarchy, showing the severity of the
|
|
|
|
|
exception. The hierarchy also groups related exceptions together to
|
2005-08-16 02:21:51 -04:00
|
|
|
|
simplify catching them in ``except`` clauses. To allow people to
|
2005-08-15 00:28:28 -04:00
|
|
|
|
be able to rely on this hierarchy, a common superclass that all
|
2005-08-07 00:14:04 -04:00
|
|
|
|
raise objects must inherit from is being proposed. It also allows
|
|
|
|
|
guarantees about the interface to raised objects to be made (see
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`344`). A discussion about all of this has occurred
|
2005-08-07 00:14:04 -04:00
|
|
|
|
before on python-dev [#Summary2004-08-01]_.
|
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
As bare ``except`` clauses stand now, they catch *all* exceptions.
|
|
|
|
|
While this can be handy, it is rather overreaching for the common
|
|
|
|
|
case. Thanks to having a required superclass, catching all
|
|
|
|
|
exceptions is as easy as catching just one specific exception.
|
|
|
|
|
This allows bare ``except`` clauses to be used for a more useful
|
|
|
|
|
purpose.
|
2005-08-15 00:28:28 -04:00
|
|
|
|
Once again, this has been discussed on python-dev [#python-dev3]_.
|
2005-08-07 00:14:04 -04:00
|
|
|
|
|
2005-08-15 00:28:28 -04:00
|
|
|
|
Finally, slight changes to the exception hierarchy will make it much
|
|
|
|
|
more reasonable in terms of structure. By minor rearranging
|
|
|
|
|
exceptions
|
|
|
|
|
that should not typically be caught can be allowed to propagate to the
|
|
|
|
|
top of the execution stack, terminating the interpreter as intended.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Philosophy of Reorganization
|
|
|
|
|
============================
|
|
|
|
|
|
2005-08-07 00:14:04 -04:00
|
|
|
|
For the reorganization of the hierarchy, there was a general
|
|
|
|
|
philosophy followed that developed from discussion of earlier drafts
|
|
|
|
|
of this PEP [#python-dev-thread1]_, [#python-dev-thread2]_,
|
2005-08-16 02:21:51 -04:00
|
|
|
|
[#python-dev-thread3]_, [#python-dev-thread4]_,
|
|
|
|
|
[#python-dev-thread5]_, [#python-dev-thread6]_.
|
|
|
|
|
First and foremost was to not break anything
|
2005-08-07 00:14:04 -04:00
|
|
|
|
that works. This meant that renaming exceptions was out of the
|
|
|
|
|
question unless the name was deemed severely bad. This
|
|
|
|
|
also meant no removal of exceptions unless they were viewed as
|
|
|
|
|
truly misplaced. The introduction of new exceptions were only done in
|
|
|
|
|
situations where there might be a use for catching a superclass of a
|
|
|
|
|
category of exceptions. Lastly, existing exceptions would have their
|
|
|
|
|
inheritance tree changed only if it was felt they were truly
|
|
|
|
|
misplaced to begin with.
|
|
|
|
|
|
|
|
|
|
For all new exceptions, the proper suffix had to be chosen. For
|
|
|
|
|
those that signal an error, "Error" is to be used. If the exception
|
|
|
|
|
is a warning, then "Warning". "Exception" is to be used when none
|
|
|
|
|
of the other suffixes are proper to use and no specific suffix is
|
|
|
|
|
a better fit.
|
|
|
|
|
|
|
|
|
|
After that it came down to choosing which exceptions should and
|
|
|
|
|
should not inherit from Exception. This was for the purpose of
|
|
|
|
|
making bare ``except`` clauses more useful.
|
|
|
|
|
|
|
|
|
|
Lastly, the entire existing hierarchy had to inherit from the new
|
|
|
|
|
exception meant to act as the required superclass for all exceptions
|
|
|
|
|
to inherit from.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
New Hierarchy
|
|
|
|
|
=============
|
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
.. Note:: Exceptions flagged with "stricter inheritance" will no
|
|
|
|
|
longer inherit from a certain class. A "broader inheritance" flag
|
|
|
|
|
means a class has been added to the exception's inheritance tree.
|
2005-08-07 00:14:04 -04:00
|
|
|
|
All comparisons are against the Python 2.4 exception hierarchy.
|
2005-08-05 01:31:44 -04:00
|
|
|
|
|
|
|
|
|
.. parsed-literal::
|
|
|
|
|
|
2005-08-07 00:14:04 -04:00
|
|
|
|
+-- BaseException (new; broader inheritance for subclasses)
|
|
|
|
|
+-- Exception
|
2022-01-21 06:03:51 -05:00
|
|
|
|
+-- GeneratorExit (defined in :pep:`342`)
|
2017-03-23 18:57:19 -04:00
|
|
|
|
+-- StandardError
|
|
|
|
|
+-- ArithmeticError
|
|
|
|
|
+-- DivideByZeroError
|
|
|
|
|
+-- FloatingPointError
|
|
|
|
|
+-- OverflowError
|
|
|
|
|
+-- AssertionError
|
|
|
|
|
+-- AttributeError
|
|
|
|
|
+-- EnvironmentError
|
|
|
|
|
+-- IOError
|
|
|
|
|
+-- EOFError
|
|
|
|
|
+-- OSError
|
|
|
|
|
+-- ImportError
|
|
|
|
|
+-- LookupError
|
|
|
|
|
+-- IndexError
|
|
|
|
|
+-- KeyError
|
|
|
|
|
+-- MemoryError
|
|
|
|
|
+-- NameError
|
|
|
|
|
+-- UnboundLocalError
|
|
|
|
|
+-- NotImplementedError (stricter inheritance)
|
|
|
|
|
+-- SyntaxError
|
|
|
|
|
+-- IndentationError
|
|
|
|
|
+-- TabError
|
|
|
|
|
+-- TypeError
|
|
|
|
|
+-- RuntimeError
|
|
|
|
|
+-- UnicodeError
|
|
|
|
|
+-- UnicodeDecodeError
|
|
|
|
|
+-- UnicodeEncodeError
|
|
|
|
|
+-- UnicodeTranslateError
|
|
|
|
|
+-- ValueError
|
|
|
|
|
+-- ReferenceError
|
|
|
|
|
+-- StopIteration
|
|
|
|
|
+-- SystemError
|
|
|
|
|
+-- Warning
|
|
|
|
|
+-- DeprecationWarning
|
|
|
|
|
+-- FutureWarning
|
|
|
|
|
+-- PendingDeprecationWarning
|
|
|
|
|
+-- RuntimeWarning
|
|
|
|
|
+-- SyntaxWarning
|
|
|
|
|
+-- UserWarning
|
|
|
|
|
+ -- WindowsError
|
2005-08-16 02:21:51 -04:00
|
|
|
|
+-- KeyboardInterrupt (stricter inheritance)
|
|
|
|
|
+-- SystemExit (stricter inheritance)
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Differences Compared to Python 2.4
|
|
|
|
|
==================================
|
|
|
|
|
|
2005-08-07 00:14:04 -04:00
|
|
|
|
A more thorough explanation of terms is needed when discussing
|
|
|
|
|
inheritance changes. Inheritance changes result in either broader or
|
|
|
|
|
more restrictive inheritance. "Broader" is when a class has an
|
|
|
|
|
inheritance tree like ``cls, A`` and then becomes ``cls, B, A``.
|
2005-08-15 00:28:28 -04:00
|
|
|
|
"Stricter" is the reverse.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
2005-08-03 23:33:03 -04:00
|
|
|
|
BaseException
|
2005-08-15 00:28:28 -04:00
|
|
|
|
-------------
|
2005-08-03 23:33:03 -04:00
|
|
|
|
|
2005-08-15 00:28:28 -04:00
|
|
|
|
The superclass that all exceptions must inherit from. It's name was
|
|
|
|
|
chosen to reflect that it is at the base of the exception hierarchy
|
|
|
|
|
while being an exception itself. "Raisable" was considered as a name,
|
|
|
|
|
it was passed on because its name did not properly reflect the fact
|
|
|
|
|
that it is an exception itself.
|
2005-08-03 23:33:03 -04:00
|
|
|
|
|
2005-08-15 00:28:28 -04:00
|
|
|
|
Direct inheritance of BaseException is not expected, and will
|
|
|
|
|
be discouraged for the general case. Most user-defined
|
|
|
|
|
exceptions should inherit from Exception instead. This allows
|
|
|
|
|
catching Exception to continue to work in the common case of catching
|
|
|
|
|
all exceptions that should be caught. Direct inheritance of
|
|
|
|
|
BaseException should only be done in cases where an entirely new
|
|
|
|
|
category of exception is desired.
|
2005-08-03 23:33:03 -04:00
|
|
|
|
|
2005-08-15 00:28:28 -04:00
|
|
|
|
But, for cases where all
|
|
|
|
|
exceptions should be caught blindly, ``except BaseException`` will
|
|
|
|
|
work.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
KeyboardInterrupt and SystemExit
|
|
|
|
|
--------------------------------
|
2005-08-15 00:28:28 -04:00
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
Both exceptions are no longer under Exception. This is to allow bare
|
|
|
|
|
``except`` clauses to act as a more viable default case by catching
|
|
|
|
|
exceptions that inherit from Exception. With both KeyboardInterrupt
|
|
|
|
|
and SystemExit acting as signals that the interpreter is expected to
|
|
|
|
|
exit, catching them in the common case is the wrong semantics.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
NotImplementedError
|
2005-08-15 00:28:28 -04:00
|
|
|
|
-------------------
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-07 00:14:04 -04:00
|
|
|
|
Inherits from Exception instead of from RuntimeError.
|
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
Originally inheriting from RuntimeError, NotImplementedError does not
|
|
|
|
|
have any direct relation to the exception meant for use in user code
|
|
|
|
|
as a quick-and-dirty exception. Thus it now directly inherits from
|
|
|
|
|
Exception.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Required Superclass for ``raise``
|
|
|
|
|
=================================
|
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
By requiring all objects passed to a ``raise`` statement to inherit
|
|
|
|
|
from a specific superclass, all exceptions are guaranteed to have
|
2022-01-21 06:03:51 -05:00
|
|
|
|
certain attributes. If :pep:`344` is accepted, the attributes
|
2005-08-05 01:31:44 -04:00
|
|
|
|
outlined there will be guaranteed to be on all exceptions raised.
|
|
|
|
|
This should help facilitate debugging by making the querying of
|
|
|
|
|
information from exceptions much easier.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
The proposed hierarchy has BaseException as the required base class.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
|
--------------
|
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
Enforcement is straightforward. Modifying ``RAISE_VARARGS`` to do an
|
|
|
|
|
inheritance check first before raising an exception should be enough.
|
|
|
|
|
For the C API, all functions that set an exception will have the same
|
|
|
|
|
inheritance check applied.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
Bare ``except`` Clauses Catch Exception
|
|
|
|
|
=======================================
|
|
|
|
|
|
|
|
|
|
In most existing Python 2.4 code, bare ``except`` clauses are too
|
|
|
|
|
broad in the exceptions they catch. Typically only exceptions that
|
|
|
|
|
signal an error are desired to be caught. This means that exceptions
|
|
|
|
|
that are used to signify that the interpreter should exit should not
|
|
|
|
|
be caught in the common case.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
With KeyboardInterrupt and SystemExit moved to inherit from
|
|
|
|
|
BaseException instead of Exception, changing bare ``except`` clauses
|
|
|
|
|
to act as ``except Exception`` becomes a much more reasonable
|
|
|
|
|
default. This change also will break very little code since these
|
|
|
|
|
semantics are what most people want for bare ``except`` clauses.
|
|
|
|
|
|
|
|
|
|
The complete removal of bare ``except`` clauses has been argued for.
|
|
|
|
|
The case has been made that they violate both Only One Way To Do It
|
|
|
|
|
(OOWTDI) and Explicit Is Better Than Implicit (EIBTI) as listed in the
|
2022-01-21 06:03:51 -05:00
|
|
|
|
:pep:`Zen of Python <20>`. But Practicality Beats Purity (PBP), also in
|
2005-08-16 02:21:51 -04:00
|
|
|
|
the Zen of Python, trumps both of these in this case. The BDFL has
|
|
|
|
|
stated that bare ``except`` clauses will work this way
|
|
|
|
|
[#python-dev8]_.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Implementation
|
|
|
|
|
--------------
|
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
The compiler will emit the bytecode for ``except Exception`` whenever
|
|
|
|
|
a bare ``except`` clause is reached.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Transition Plan
|
|
|
|
|
===============
|
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
Because of the complexity and clutter that would be required to add
|
|
|
|
|
all features planned in this PEP, the transition plan is very simple.
|
|
|
|
|
In Python |2.x| BaseException is added. In Python 3.0, all remaining
|
|
|
|
|
features (required superclass, change in inheritance, bare ``except``
|
|
|
|
|
clauses becoming the same as ``except Exception``) will go into
|
|
|
|
|
affect. In order to make all of this work in a backwards-compatible
|
|
|
|
|
way in Python |2.x| would require very deep hacks in the exception
|
|
|
|
|
machinery which could be error-prone and lead to a slowdown in
|
|
|
|
|
performance for little benefit.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
To help with the transition, the documentation will be changed to
|
|
|
|
|
reflect several programming guidelines:
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
- When one wants to catch *all* exceptions, catch BaseException
|
|
|
|
|
- To catch all exceptions that do not represent the termination of
|
|
|
|
|
the interpreter, catch Exception explicitly
|
|
|
|
|
- Explicitly catch KeyboardInterrupt and SystemExit; don't rely on
|
|
|
|
|
inheritance from Exception to lead to the capture
|
|
|
|
|
- Always catch NotImplementedError explicitly instead of relying on
|
|
|
|
|
the inheritance from RuntimeError
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
The documentation for the 'exceptions' module [#exceptions-stdlib]_,
|
2022-01-21 06:03:51 -05:00
|
|
|
|
tutorial [#tutorial]_, and :pep:`290` will all require
|
2005-08-16 02:21:51 -04:00
|
|
|
|
updating.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rejected Ideas
|
|
|
|
|
==============
|
|
|
|
|
|
|
|
|
|
DeprecationWarning Inheriting From PendingDeprecationWarning
|
|
|
|
|
------------------------------------------------------------
|
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
This was originally proposed because a DeprecationWarning can be
|
|
|
|
|
viewed as a PendingDeprecationWarning that is being removed in the
|
|
|
|
|
next version. But since enough people thought the inheritance could
|
|
|
|
|
logically work the other way around, the idea was dropped.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
AttributeError Inheriting From TypeError or NameError
|
|
|
|
|
-----------------------------------------------------
|
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
Viewing attributes as part of the interface of a type caused the idea
|
|
|
|
|
of inheriting from TypeError. But that partially defeats the thinking
|
|
|
|
|
of duck typing and thus the idea was dropped.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
Inheriting from NameError was suggested because objects can be viewed
|
|
|
|
|
as having their own namespace where the attributes live and when an
|
|
|
|
|
attribute is not found it is a namespace failure. This was also
|
|
|
|
|
dropped as a possibility since not everyone shared this view.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Removal of EnvironmentError
|
|
|
|
|
---------------------------
|
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
Originally proposed based on the idea that EnvironmentError was an
|
|
|
|
|
unneeded distinction, the BDFL overruled this idea [#python-dev4]_.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Introduction of MacError and UnixError
|
|
|
|
|
--------------------------------------
|
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
Proposed to add symmetry to WindowsError, the BDFL said they won't be
|
|
|
|
|
used enough [#python-dev4]_. The idea of then removing WindowsError
|
|
|
|
|
was proposed and accepted as reasonable, thus completely negating the
|
|
|
|
|
idea of adding these exceptions.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SystemError Subclassing SystemExit
|
|
|
|
|
----------------------------------
|
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
Proposed because a SystemError is meant to lead to a system exit, the
|
2005-08-07 00:14:04 -04:00
|
|
|
|
idea was removed since CriticalError indicates this better.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
2005-08-03 23:33:03 -04:00
|
|
|
|
ControlFlowException Under Exception
|
|
|
|
|
------------------------------------
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
It has been suggested that ControlFlowException should inherit from
|
|
|
|
|
Exception. This idea has been rejected based on the thinking that
|
2005-08-15 00:28:28 -04:00
|
|
|
|
control flow exceptions typically do not all need to be caught by a
|
|
|
|
|
single ``except`` clause.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-07 00:14:04 -04:00
|
|
|
|
Rename NameError to NamespaceError
|
|
|
|
|
----------------------------------
|
|
|
|
|
|
2005-08-15 00:28:28 -04:00
|
|
|
|
NameError is considered more succinct and leaves open no possible
|
|
|
|
|
mistyping of
|
2005-08-07 00:14:04 -04:00
|
|
|
|
the capitalization of "Namespace" [#python-dev5]_.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Renaming RuntimeError or Introducing SimpleError
|
|
|
|
|
''''''''''''''''''''''''''''''''''''''''''''''''
|
|
|
|
|
|
|
|
|
|
The thinking was that RuntimeError was in no way an obvious name for
|
|
|
|
|
an exception meant to be used when a situation did not call for the
|
|
|
|
|
creation of a new exception. The renaming was rejected on the basis
|
2005-08-15 00:28:28 -04:00
|
|
|
|
that the exception is already used throughout the interpreter
|
|
|
|
|
[#python-dev6]_.
|
2005-08-07 00:14:04 -04:00
|
|
|
|
Rejection of SimpleError was founded on the thought that people
|
|
|
|
|
should be free to use whatever exception they choose and not have one
|
2016-07-11 11:14:08 -04:00
|
|
|
|
so blatantly suggested [#python-dev7]_.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-07 00:14:04 -04:00
|
|
|
|
Renaming Existing Exceptions
|
2005-08-03 23:18:57 -04:00
|
|
|
|
----------------------------
|
|
|
|
|
|
2005-08-07 00:14:04 -04:00
|
|
|
|
Various renamings were suggested but non garnered more than a +0 vote
|
|
|
|
|
(renaming ReferenceError to WeakReferenceError). The thinking was
|
|
|
|
|
that the existing names were fine and no one had actively complained
|
|
|
|
|
about them ever. To minimize backwards-compatibility issues and
|
|
|
|
|
causing existing Python programmers extra pain, the renamings were
|
|
|
|
|
removed.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-09 00:26:28 -04:00
|
|
|
|
Have EOFError Subclass IOError
|
|
|
|
|
------------------------------
|
|
|
|
|
|
2005-08-15 00:28:28 -04:00
|
|
|
|
The original thought was that since EOFError deals directly with I/O,
|
|
|
|
|
it should
|
|
|
|
|
subclass IOError. But since EOFError is used more as a signal that an
|
|
|
|
|
event
|
|
|
|
|
has occurred (the exhaustion of an I/O port), it should not subclass
|
|
|
|
|
such a specific error exception.
|
2005-08-09 00:26:28 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Have MemoryError and SystemError Have a Common Superclass
|
|
|
|
|
---------------------------------------------------------
|
|
|
|
|
|
2005-08-15 00:28:28 -04:00
|
|
|
|
Both classes deal with the interpreter, so why not have them have a
|
|
|
|
|
common
|
|
|
|
|
superclass? Because one of them means that the interpreter is in a
|
|
|
|
|
state that it should not recover from while the other does not.
|
2005-08-09 00:26:28 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Common Superclass for PendingDeprecationWarning and DeprecationWarning
|
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
|
|
2005-08-15 00:28:28 -04:00
|
|
|
|
Grouping the deprecation warning exceptions together makes intuitive
|
|
|
|
|
sense.
|
|
|
|
|
But this sensical idea does not extend well when one considers how
|
|
|
|
|
rarely either warning is used, let along at the same time.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Removing WindowsError
|
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
|
|
Originally proposed based on the idea that having such a
|
|
|
|
|
platform-specific exception should not be in the built-in namespace.
|
|
|
|
|
It turns out, though, enough code exists that uses the exception to
|
|
|
|
|
warrant it staying.
|
2005-08-09 00:26:28 -04:00
|
|
|
|
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
Superclass for KeyboardInterrupt and SystemExit
|
|
|
|
|
-----------------------------------------------
|
|
|
|
|
|
|
|
|
|
Proposed to make catching non-Exception inheriting exceptions easier
|
|
|
|
|
along with easing the transition to the new hierarchy, the idea was
|
|
|
|
|
rejected by the BDFL [#python-dev8]_. The argument that existing
|
|
|
|
|
code did not show enough instances of the pair of exceptions being
|
|
|
|
|
caught and thus did not justify cluttering the built-in namespace
|
|
|
|
|
was used.
|
|
|
|
|
|
|
|
|
|
|
2005-08-03 23:18:57 -04:00
|
|
|
|
Acknowledgements
|
|
|
|
|
================
|
|
|
|
|
|
2023-10-11 08:05:51 -04:00
|
|
|
|
Thanks to Robert Brewer, Josiah Carlson, Alyssa Coghlan, Timothy
|
2005-08-05 01:31:44 -04:00
|
|
|
|
Delaney, Jack Diedrich, Fred L. Drake, Jr., Philip J. Eby, Greg Ewing,
|
2005-08-07 00:14:04 -04:00
|
|
|
|
James Y. Knight, MA Lemburg, Guido van Rossum, Stephen J. Turnbull,
|
|
|
|
|
Raymond Hettinger, and everyone else I missed for participating in the
|
|
|
|
|
discussion.
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
References
|
|
|
|
|
==========
|
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
.. [#Summary2004-08-01] python-dev Summary (An exception is an
|
|
|
|
|
exception, unless it doesn't inherit from Exception)
|
2005-08-07 00:14:04 -04:00
|
|
|
|
http://www.python.org/dev/summary/2004-08-01_2004-08-15.html#an-exception-is-an-exception-unless-it-doesn-t-inherit-from-exception
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
.. [#python-dev3] python-dev email (PEP, take 2: Exception
|
|
|
|
|
Reorganization for Python 3.0)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-August/055116.html
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
.. [#exceptions-stdlib] exceptions module
|
2008-10-02 08:40:49 -04:00
|
|
|
|
http://docs.python.org/library/exceptions.html
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
.. [#python-dev-thread1] python-dev thread (Pre-PEP: Exception
|
|
|
|
|
Reorganization for Python 3.0)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-July/055020.html,
|
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-August/055065.html
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
.. [#python-dev-thread2] python-dev thread (PEP, take 2: Exception
|
|
|
|
|
Reorganization for Python 3.0)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-August/055103.html
|
2005-08-07 00:14:04 -04:00
|
|
|
|
|
|
|
|
|
.. [#python-dev-thread3] python-dev thread (Reorg PEP checked in)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-August/055138.html
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
.. [#python-dev-thread4] python-dev thread (Major revision of PEP 348 committed)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-August/055199.html
|
2005-08-16 02:21:51 -04:00
|
|
|
|
|
|
|
|
|
.. [#python-dev-thread5] python-dev thread (Exception Reorg PEP revised yet again)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-August/055292.html
|
2005-08-16 02:21:51 -04:00
|
|
|
|
|
|
|
|
|
.. [#python-dev-thread6] python-dev thread (PEP 348 (exception reorg) revised again)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-August/055412.html
|
2005-08-16 02:21:51 -04:00
|
|
|
|
|
2005-08-05 01:31:44 -04:00
|
|
|
|
.. [#python-dev4] python-dev email (Pre-PEP: Exception Reorganization
|
|
|
|
|
for Python 3.0)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-July/055019.html
|
2005-08-07 00:14:04 -04:00
|
|
|
|
|
|
|
|
|
.. [#python-dev5] python-dev email (PEP, take 2: Exception Reorganization for
|
2005-08-08 22:46:12 -04:00
|
|
|
|
Python 3.0)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-August/055159.html
|
2005-08-07 00:14:04 -04:00
|
|
|
|
|
|
|
|
|
.. [#python-dev6] python-dev email (Exception Reorg PEP checked in)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-August/055149.html
|
2005-08-07 00:14:04 -04:00
|
|
|
|
|
|
|
|
|
.. [#python-dev7] python-dev email (Exception Reorg PEP checked in)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-August/055175.html
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
2005-08-16 02:21:51 -04:00
|
|
|
|
.. [#python-dev8] python-dev email (PEP 348 (exception reorg) revised again)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-August/055423.html
|
2005-08-16 02:21:51 -04:00
|
|
|
|
|
|
|
|
|
.. [#tutorial] Python Tutorial
|
2008-10-02 08:40:49 -04:00
|
|
|
|
http://docs.python.org/tutorial/
|
2005-08-16 02:21:51 -04:00
|
|
|
|
|
2005-08-26 02:01:04 -04:00
|
|
|
|
.. [#rejected] python-dev email (Bare except clauses in PEP 348)
|
2017-06-11 15:02:39 -04:00
|
|
|
|
https://mail.python.org/pipermail/python-dev/2005-August/055676.html
|
2005-08-26 02:01:04 -04:00
|
|
|
|
|
2005-08-03 23:18:57 -04:00
|
|
|
|
|
|
|
|
|
Copyright
|
|
|
|
|
=========
|
|
|
|
|
|
|
|
|
|
This document has been placed in the public domain.
|
2005-08-05 01:31:44 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
..
|
|
|
|
|
Local Variables:
|
|
|
|
|
mode: indented-text
|
|
|
|
|
indent-tabs-mode: nil
|
|
|
|
|
sentence-end-double-space: t
|
|
|
|
|
fill-column: 70
|
|
|
|
|
End:
|