Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 1 | .. currentmodule:: asyncio |
| 2 | |
| 3 | |
Yury Selivanov | 7372c3b | 2018-09-14 15:11:24 -0700 | [diff] [blame] | 4 | .. _asyncio-exceptions: |
| 5 | |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 6 | ========== |
| 7 | Exceptions |
| 8 | ========== |
| 9 | |
| 10 | |
| 11 | .. exception:: TimeoutError |
| 12 | |
| 13 | The operation has exceeded the given deadline. |
| 14 | |
Yury Selivanov | 7372c3b | 2018-09-14 15:11:24 -0700 | [diff] [blame] | 15 | .. important:: |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 16 | This exception is different from the builtin :exc:`TimeoutError` |
| 17 | exception. |
| 18 | |
| 19 | |
| 20 | .. exception:: CancelledError |
| 21 | |
| 22 | The operation has been cancelled. |
| 23 | |
Carol Willing | a3c8ba7 | 2018-09-13 16:14:41 -0700 | [diff] [blame] | 24 | This exception can be caught to perform custom operations |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 25 | when asyncio Tasks are cancelled. In almost all situations the |
Elvis Pranskevichus | 1fa2ec4 | 2018-09-17 19:16:44 -0400 | [diff] [blame] | 26 | exception must be re-raised. |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 27 | |
Yury Selivanov | 7372c3b | 2018-09-14 15:11:24 -0700 | [diff] [blame] | 28 | .. important:: |
Carol Willing | a3c8ba7 | 2018-09-13 16:14:41 -0700 | [diff] [blame] | 29 | |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 30 | This exception is a subclass of :exc:`Exception`, so it can be |
Elvis Pranskevichus | 1fa2ec4 | 2018-09-17 19:16:44 -0400 | [diff] [blame] | 31 | accidentally suppressed by an overly broad ``try..except`` block:: |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 32 | |
| 33 | try: |
| 34 | await operation |
| 35 | except Exception: |
| 36 | # The cancellation is broken because the *except* block |
| 37 | # suppresses the CancelledError exception. |
| 38 | log.log('an error has occurred') |
| 39 | |
| 40 | Instead, the following pattern should be used:: |
| 41 | |
| 42 | try: |
| 43 | await operation |
| 44 | except asyncio.CancelledError: |
| 45 | raise |
| 46 | except Exception: |
| 47 | log.log('an error has occurred') |
| 48 | |
| 49 | |
| 50 | .. exception:: InvalidStateError |
| 51 | |
| 52 | Invalid internal state of :class:`Task` or :class:`Future`. |
| 53 | |
| 54 | Can be raised in situations like setting a result value for a |
| 55 | *Future* object that already has a result value set. |
| 56 | |
| 57 | |
| 58 | .. exception:: SendfileNotAvailableError |
| 59 | |
Carol Willing | a3c8ba7 | 2018-09-13 16:14:41 -0700 | [diff] [blame] | 60 | The "sendfile" syscall is not available for the given |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 61 | socket or file type. |
| 62 | |
| 63 | A subclass of :exc:`RuntimeError`. |
| 64 | |
| 65 | |
| 66 | .. exception:: IncompleteReadError |
| 67 | |
Andre Delfino | 11205b8 | 2019-03-10 08:02:17 -0300 | [diff] [blame] | 68 | The requested read operation did not complete fully. |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 69 | |
Andre Delfino | 11205b8 | 2019-03-10 08:02:17 -0300 | [diff] [blame] | 70 | Raised by the :ref:`asyncio stream APIs<asyncio-streams>`. |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 71 | |
Andre Delfino | 11205b8 | 2019-03-10 08:02:17 -0300 | [diff] [blame] | 72 | This exception is a subclass of :exc:`EOFError`. |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 73 | |
| 74 | .. attribute:: expected |
| 75 | |
Elvis Pranskevichus | 1fa2ec4 | 2018-09-17 19:16:44 -0400 | [diff] [blame] | 76 | The total number (:class:`int`) of expected bytes. |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 77 | |
| 78 | .. attribute:: partial |
| 79 | |
Elvis Pranskevichus | 1fa2ec4 | 2018-09-17 19:16:44 -0400 | [diff] [blame] | 80 | A string of :class:`bytes` read before the end of stream was reached. |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 81 | |
| 82 | |
| 83 | .. exception:: LimitOverrunError |
| 84 | |
Elvis Pranskevichus | 1fa2ec4 | 2018-09-17 19:16:44 -0400 | [diff] [blame] | 85 | Reached the buffer size limit while looking for a separator. |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 86 | |
Elvis Pranskevichus | 1fa2ec4 | 2018-09-17 19:16:44 -0400 | [diff] [blame] | 87 | Raised by the :ref:`asyncio stream APIs <asyncio-streams>`. |
Yury Selivanov | 7c7605f | 2018-09-11 09:54:40 -0700 | [diff] [blame] | 88 | |
| 89 | .. attribute:: consumed |
| 90 | |
Elvis Pranskevichus | 1fa2ec4 | 2018-09-17 19:16:44 -0400 | [diff] [blame] | 91 | The total number of to be consumed bytes. |