[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