[Python-checkins] r84457 - peps/trunk/pep-3151.txt
antoine.pitrou
python-checkins at python.org
Fri Sep 3 19:07:56 CEST 2010
Author: antoine.pitrou
Date: Fri Sep 3 19:07:56 2010
New Revision: 84457
Log:
Add "Error" at the end of class names.
Propose two new intermediate classes (ConnectionError and FileSystemError)
Add a small diagram.
Modified:
peps/trunk/pep-3151.txt
Modified: peps/trunk/pep-3151.txt
==============================================================================
--- peps/trunk/pep-3151.txt (original)
+++ peps/trunk/pep-3151.txt Fri Sep 3 19:07:56 2010
@@ -154,7 +154,7 @@
try:
os.remove(filename)
- except FileNotFound:
+ except FileNotFoundError:
pass
@@ -330,44 +330,76 @@
The following tentative list of subclasses, along with a description and
the list of errnos mapped to them, is submitted to discussion:
-* ``FileAlreadyExists``: trying to create a file or directory which already
- exists (EEXIST)
+* ``FileAlreadyExistsError``: trying to create a file or directory which
+ already exists (EEXIST)
-* ``FileNotFound``: for all circumstances where a file and directory is
+* ``FileNotFoundError``: for all circumstances where a file and directory is
requested but doesn't exist (ENOENT)
-* ``IsADirectory``: file-level operation (open(), os.remove()...) requested
- on a directory (EISDIR)
+* ``IsADirectoryError``: file-level operation (open(), os.remove()...)
+ requested on a directory (EISDIR)
-* ``NotADirectory``: directory-level operation requested on something else
- (ENOTDIR)
+* ``NotADirectoryError``: directory-level operation requested on something
+ else (ENOTDIR)
-* ``PermissionDenied``: trying to run an operation without the adequate access
- rights - for example filesystem permissions (EACCESS, optionally EPERM)
+* ``PermissionError``: trying to run an operation without the adequate access
+ rights - for example filesystem permissions (EACCESS, EPERM)
* ``BlockingIOError``: an operation would block on an object (e.g. socket) set
for non-blocking operation (EAGAIN, EALREADY, EWOULDBLOCK, EINPROGRESS);
this is the existing ``io.BlockingIOError`` with an extended role
-* ``BadFileDescriptor``: operation on an invalid file descriptor (EBADF);
+* ``FileDescriptorError``: operation on an invalid file descriptor (EBADF);
the default error message could point out that most causes are that
an existing file descriptor has been closed
-* ``ConnectionAborted``: connection attempt aborted by peer (ECONNABORTED)
+* ``ConnectionAbortedError``: connection attempt aborted by peer (ECONNABORTED)
-* ``ConnectionRefused``: connection reset by peer (ECONNREFUSED)
+* ``ConnectionRefusedError``: connection reset by peer (ECONNREFUSED)
-* ``ConnectionReset``: connection reset by peer (ECONNRESET)
+* ``ConnectionResetError``: connection reset by peer (ECONNRESET)
-* ``TimeoutError``: connection timed out (ECONNTIMEOUT); this could be re-cast
+* ``TimeoutError``: connection timed out (ECONNTIMEOUT); this can be re-cast
as a generic timeout exception, useful for other types of timeout (for
example in Lock.acquire())
-This list assumes `Step 1`_ is accepted in full; the exception classes
-described above would all derive from the now unified exception type
-IOError. It will need reworking if a partial version of step 1 is accepted
-instead (again, see appendix A for the current distribution of errnos
-and exception types).
+In addition, the following exception class are proposed for inclusion:
+
+* ``ConnectionError``: a base class for ``ConnectionAbortedError``,
+ ``ConnectionRefusedError`` and ``ConnectionResetError``
+
+* ``FileSystemError``: a base class for ``FileAlreadyExistsError``,
+ ``FileNotFoundError``, ``IsADirectoryError`` and ``NotADirectoryError``
+
+The following drawing tries to sum up the proposed additions, along with
+the corresponding errno values (where applicable). The root of the
+sub-hierarchy (IOError, assuming `Step 1`_ is accepted in full) is not
+shown::
+
+ +-- BlockingIOError EAGAIN, EALREADY, EWOULDBLOCK, EINPROGRESS
+ +-- ConnectionError
+ +-- ConnectionAbortedError ECONNABORTED
+ +-- ConnectionRefusedError ECONNREFUSED
+ +-- ConnectionResetError ECONNRESET
+ +-- FileDescriptorError EBADF
+ +-- FileSystemError
+ +-- FileAlreadyExistsError EEXIST
+ +-- FileNotFoundError ENOENT
+ +-- IsADirectoryError EISDIR
+ +-- NotADirectoryError ENOTDIR
+ +-- PermissionError EACCESS, EPERM
+ +-- TimeoutError ECONNTIMEOUT
+
+Naming
+------
+
+Various naming controversies can arise. One of them is whether all
+exception class names should end in "``Error``". In favour is consistency
+with the rest of the exception hiearchy, against is concision (especially
+with long names such as ``FileAlreadyExistsError``).
+
+Another cosmetic issue is whether ``FileSystemError`` should be spelled
+``FilesystemError`` instead.
Exception attributes
--------------------
More information about the Python-checkins
mailing list