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.