]> granicus.if.org Git - python/commitdiff
What's New in Python 3.3: mention the PEP 3151
authorVictor Stinner <victor.stinner@haypocalc.com>
Wed, 12 Oct 2011 18:35:02 +0000 (20:35 +0200)
committerVictor Stinner <victor.stinner@haypocalc.com>
Wed, 12 Oct 2011 18:35:02 +0000 (20:35 +0200)
Doc/whatsnew/3.3.rst

index 0687d9a46aa4fb8dce1c31f23178666062698aed..2468d049a4d6e067f4dda9b084cfe05fc43486ec 100644 (file)
@@ -109,6 +109,69 @@ XXX Add list of changes introduced by :pep:`393` here:
 XXX mention new and deprecated functions and macros
 
 
+PEP 3151: Reworking the OS and IO exception hierarchy
+=====================================================
+
+:pep:`3151` - Reworking the OS and IO exception hierarchy
+PEP written and implemented by Antoine Pitrou.
+
+New subclasses of :exc:`OSError` exceptions:
+
+ * :exc:`BlockingIOError`
+ * :exc:`ChildProcessError`
+ * :exc:`ConnectionError`
+
+   * :exc:`BrokenPipeError`
+   * :exc:`ConnectionAbortedError`
+   * :exc:`ConnectionRefusedError`
+   * :exc:`ConnectionResetError`
+
+ * :exc:`FileExistsError`
+ * :exc:`FileNotFoundError`
+ * :exc:`InterruptedError`
+ * :exc:`IsADirectoryError`
+ * :exc:`NotADirectoryError`
+ * :exc:`PermissionError`
+ * :exc:`ProcessLookupError`
+ * :exc:`TimeoutError`
+
+The following exceptions have been merged into :exc:`OSError`:
+
+ * :exc:`EnvironmentError`
+ * :exc:`IOError`
+ * :exc:`WindowsError`
+ * :exc:`VMSError`
+ * :exc:`socket.error`
+ * :exc:`select.error`
+ * :exc:`mmap.error`
+
+Thanks to the new exceptions, common usages of the :mod:`errno` can now be
+avoided. For example, the following code written for Python 3.2: ::
+
+    from errno import ENOENT, EACCES, EPERM
+
+    try:
+        with open("document.txt") as f:
+            content = f.read()
+    except IOError as err:
+        if err.errno == ENOENT:
+            print("document.txt file is missing")
+        elif err.errno in (EACCES, EPERM):
+            print("You are not allowed to read document.txt")
+        else:
+            raise
+
+can now be written without the :mod:`errno` import: ::
+
+    try:
+        with open("document.txt") as f:
+            content = f.read()
+    except FileNotFoundError:
+        print("document.txt file is missing")
+    except PermissionError:
+        print("You are not allowed to read document.txt")
+
+
 Other Language Changes
 ======================