bpo-33649: Backport asyncio docs from 'master' to 3.7 (GH-9377)

diff --git a/Doc/library/asyncio-exceptions.rst b/Doc/library/asyncio-exceptions.rst
new file mode 100644
index 0000000..dbd5df7
--- /dev/null
+++ b/Doc/library/asyncio-exceptions.rst
@@ -0,0 +1,91 @@
+.. currentmodule:: asyncio
+
+
+.. _asyncio-exceptions:
+
+==========
+Exceptions
+==========
+
+
+.. exception:: TimeoutError
+
+   The operation has exceeded the given deadline.
+
+   .. important::
+      This exception is different from the builtin :exc:`TimeoutError`
+      exception.
+
+
+.. exception:: CancelledError
+
+   The operation has been cancelled.
+
+   This exception can be caught to perform custom operations
+   when asyncio Tasks are cancelled.  In almost all situations the
+   exception must be re-raised.
+
+   .. important::
+
+      This exception is a subclass of :exc:`Exception`, so it can be
+      accidentally suppressed by an overly broad ``try..except`` block::
+
+        try:
+            await operation
+        except Exception:
+            # The cancellation is broken because the *except* block
+            # suppresses the CancelledError exception.
+            log.log('an error has occurred')
+
+      Instead, the following pattern should be used::
+
+        try:
+            await operation
+        except asyncio.CancelledError:
+            raise
+        except Exception:
+            log.log('an error has occurred')
+
+
+.. exception:: InvalidStateError
+
+   Invalid internal state of :class:`Task` or :class:`Future`.
+
+   Can be raised in situations like setting a result value for a
+   *Future* object that already has a result value set.
+
+
+.. exception:: SendfileNotAvailableError
+
+   The "sendfile" syscall is not available for the given
+   socket or file type.
+
+   A subclass of :exc:`RuntimeError`.
+
+
+.. exception:: IncompleteReadError
+
+    The requested read operation did not complete fully.
+
+    Raised by the :ref:`asyncio stream APIs<asyncio-streams>`.
+
+    This exception is a subclass of :exc:`EOFError`.
+
+   .. attribute:: expected
+
+      The total number (:class:`int`) of expected bytes.
+
+   .. attribute:: partial
+
+      A string of :class:`bytes` read before the end of stream was reached.
+
+
+.. exception:: LimitOverrunError
+
+   Reached the buffer size limit while looking for a separator.
+
+   Raised by the :ref:`asyncio stream APIs <asyncio-streams>`.
+
+   .. attribute:: consumed
+
+      The total number of to be consumed bytes.