| .. _bltin-exceptions: | |
| Built-in Exceptions | |
| =================== | |
| .. index:: | |
| pair: statement; try | |
| pair: statement; except | |
| In Python, all exceptions must be instances of a class that derives from | |
| :class:`BaseException`. In a :keyword:`try` statement with an :keyword:`except` | |
| clause that mentions a particular class, that clause also handles any exception | |
| classes derived from that class (but not exception classes from which *it* is | |
| derived). Two exception classes that are not related via subclassing are never | |
| equivalent, even if they have the same name. | |
| .. index:: pair: statement; raise | |
| The built-in exceptions listed in this chapter can be generated by the interpreter or | |
| built-in functions. Except where mentioned, they have an "associated value" | |
| indicating the detailed cause of the error. This may be a string or a tuple of | |
| several items of information (e.g., an error code and a string explaining the | |
| code). The associated value is usually passed as arguments to the exception | |
| class's constructor. | |
| User code can raise built-in exceptions. This can be used to test an exception | |
| handler or to report an error condition "just like" the situation in which the | |
| interpreter raises the same exception; but beware that there is nothing to | |
| prevent user code from raising an inappropriate error. | |
| The built-in exception classes can be subclassed to define new exceptions; | |
| programmers are encouraged to derive new exceptions from the :exc:`Exception` | |
| class or one of its subclasses, and not from :exc:`BaseException`. More | |
| information on defining exceptions is available in the Python Tutorial under | |
| :ref:`tut-userexceptions`. | |
| Exception context | |
| ----------------- | |
| .. index:: pair: exception; chaining | |
| __cause__ (exception attribute) | |
| __context__ (exception attribute) | |
| __suppress_context__ (exception attribute) | |
| Three attributes on exception objects provide information about the context in | |
| which the exception was raised: | |
| .. attribute:: BaseException.__context__ | |
| BaseException.__cause__ | |
| BaseException.__suppress_context__ | |
| When raising a new exception while another exception | |
| is already being handled, the new exception's | |
| :attr:`!__context__` attribute is automatically set to the handled | |
| exception. An exception may be handled when an :keyword:`except` or | |
| :keyword:`finally` clause, or a :keyword:`with` statement, is used. | |
| This implicit exception context can be | |
| supplemented with an explicit cause by using :keyword:`!from` with | |
| :keyword:`raise`:: | |
| raise new_exc from original_exc | |
| The expression following :keyword:`from<raise>` must be an exception or ``None``. It | |
| will be set as :attr:`!__cause__` on the raised exception. Setting | |
| :attr:`!__cause__` also implicitly sets the :attr:`!__suppress_context__` | |
| attribute to ``True``, so that using ``raise new_exc from None`` | |
| effectively replaces the old exception with the new one for display | |
| purposes (e.g. converting :exc:`KeyError` to :exc:`AttributeError`), while | |
| leaving the old exception available in :attr:`!__context__` for introspection | |
| when debugging. | |
| The default traceback display code shows these chained exceptions in | |
| addition to the traceback for the exception itself. An explicitly chained | |
| exception in :attr:`!__cause__` is always shown when present. An implicitly | |
| chained exception in :attr:`!__context__` is shown only if :attr:`!__cause__` | |
| is :const:`None` and :attr:`!__suppress_context__` is false. | |
| In either case, the exception itself is always shown after any chained | |
| exceptions so that the final line of the traceback always shows the last | |
| exception that was raised. | |
| Inheriting from built-in exceptions | |
| ----------------------------------- | |
| User code can create subclasses that inherit from an exception type. | |
| It's recommended to only subclass one exception type at a time to avoid | |
| any possible conflicts between how the bases handle the ``args`` | |
| attribute, as well as due to possible memory layout incompatibilities. | |
| .. impl-detail:: | |
| Most built-in exceptions are implemented in C for efficiency, see: | |
| :source:`Objects/exceptions.c`. Some have custom memory layouts | |
| which makes it impossible to create a subclass that inherits from | |
| multiple exception types. The memory layout of a type is an implementation | |
| detail and might change between Python versions, leading to new | |
| conflicts in the future. Therefore, it's recommended to avoid | |
| subclassing multiple exception types altogether. | |
| Base classes | |
| ------------ | |
| The following exceptions are used mostly as base classes for other exceptions. | |
| .. exception:: BaseException | |
| The base class for all built-in exceptions. It is not meant to be directly | |
| inherited by user-defined classes (for that, use :exc:`Exception`). If | |
| :func:`str` is called on an instance of this class, the representation of | |
| the argument(s) to the instance are returned, or the empty string when | |
| there were no arguments. | |
| .. attribute:: args | |
| The tuple of arguments given to the exception constructor. Some built-in | |
| exceptions (like :exc:`OSError`) expect a certain number of arguments and | |
| assign a special meaning to the elements of this tuple, while others are | |
| usually called only with a single string giving an error message. | |
| .. method:: with_traceback(tb) | |
| This method sets *tb* as the new traceback for the exception and returns | |
| the exception object. It was more commonly used before the exception | |
| chaining features of :pep:`3134` became available. The following example | |
| shows how we can convert an instance of ``SomeException`` into an | |
| instance of ``OtherException`` while preserving the traceback. Once | |
| raised, the current frame is pushed onto the traceback of the | |
| ``OtherException``, as would have happened to the traceback of the | |
| original ``SomeException`` had we allowed it to propagate to the caller. :: | |
| try: | |
| ... | |
| except SomeException: | |
| tb = sys.exception().__traceback__ | |
| raise OtherException(...).with_traceback(tb) | |
| .. attribute:: __traceback__ | |
| A writable field that holds the | |
| :ref:`traceback object <traceback-objects>` associated with this | |
| exception. See also: :ref:`raise`. | |
| .. method:: add_note(note) | |
| Add the string ``note`` to the exception's notes which appear in the standard | |
| traceback after the exception string. A :exc:`TypeError` is raised if ``note`` | |
| is not a string. | |
| .. versionadded:: 3.11 | |
| .. attribute:: __notes__ | |
| A list of the notes of this exception, which were added with :meth:`add_note`. | |
| This attribute is created when :meth:`add_note` is called. | |
| .. versionadded:: 3.11 | |
| .. exception:: Exception | |
| All built-in, non-system-exiting exceptions are derived from this class. All | |
| user-defined exceptions should also be derived from this class. | |
| .. exception:: ArithmeticError | |
| The base class for those built-in exceptions that are raised for various | |
| arithmetic errors: :exc:`OverflowError`, :exc:`ZeroDivisionError`, | |
| :exc:`FloatingPointError`. | |
| .. exception:: BufferError | |
| Raised when a :ref:`buffer <bufferobjects>` related operation cannot be | |
| performed. | |
| .. exception:: LookupError | |
| The base class for the exceptions that are raised when a key or index used on | |
| a mapping or sequence is invalid: :exc:`IndexError`, :exc:`KeyError`. This | |
| can be raised directly by :func:`codecs.lookup`. | |
| Concrete exceptions | |
| ------------------- | |
| The following exceptions are the exceptions that are usually raised. | |
| .. exception:: AssertionError | |
| .. index:: pair: statement; assert | |
| Raised when an :keyword:`assert` statement fails. | |
| .. exception:: AttributeError | |
| Raised when an attribute reference (see :ref:`attribute-references`) or | |
| assignment fails. (When an object does not support attribute references or | |
| attribute assignments at all, :exc:`TypeError` is raised.) | |
| The optional *name* and *obj* keyword-only arguments | |
| set the corresponding attributes: | |
| .. attribute:: name | |
| The name of the attribute that was attempted to be accessed. | |
| .. attribute:: obj | |
| The object that was accessed for the named attribute. | |
| When possible, :attr:`name` and :attr:`obj` are set automatically. | |
| .. versionchanged:: 3.10 | |
| Added the :attr:`name` and :attr:`obj` attributes. | |
| .. exception:: EOFError | |
| Raised when the :func:`input` function hits an end-of-file condition (EOF) | |
| without reading any data. (Note: the :meth:`io.TextIOBase.read` and | |
| :meth:`io.IOBase.readline` methods return an empty string when they hit EOF.) | |
| .. exception:: FloatingPointError | |
| Not currently used. | |
| .. exception:: GeneratorExit | |
| Raised when a :term:`generator` or :term:`coroutine` is closed; | |
| see :meth:`generator.close` and :meth:`coroutine.close`. It | |
| directly inherits from :exc:`BaseException` instead of :exc:`Exception` since | |
| it is technically not an error. | |
| .. exception:: ImportError | |
| Raised when the :keyword:`import` statement has troubles trying to | |
| load a module. Also raised when the "from list" in ``from ... import`` | |
| has a name that cannot be found. | |
| The optional *name* and *path* keyword-only arguments | |
| set the corresponding attributes: | |
| .. attribute:: name | |
| The name of the module that was attempted to be imported. | |
| .. attribute:: path | |
| The path to any file which triggered the exception. | |
| .. versionchanged:: 3.3 | |
| Added the :attr:`name` and :attr:`path` attributes. | |
| .. exception:: ModuleNotFoundError | |
| A subclass of :exc:`ImportError` which is raised by :keyword:`import` | |
| when a module could not be located. It is also raised when ``None`` | |
| is found in :data:`sys.modules`. | |
| .. versionadded:: 3.6 | |
| .. exception:: ImportCycleError | |
| A subclass of :exc:`ImportError` which is raised when a lazy import fails | |
| because it (directly or indirectly) tries to import itself. | |
| .. versionadded:: 3.15 | |
| .. exception:: IndexError | |
| Raised when a sequence subscript is out of range. (Slice indices are | |
| silently truncated to fall in the allowed range; if an index is not an | |
| integer, :exc:`TypeError` is raised.) | |
| .. XXX xref to sequences | |
| .. exception:: KeyError | |
| Raised when a mapping (dictionary) key is not found in the set of existing keys. | |
| .. XXX xref to mapping objects? | |
| .. exception:: KeyboardInterrupt | |
| Raised when the user hits the interrupt key (normally :kbd:`Control-C` or | |
| :kbd:`Delete`). During execution, a check for interrupts is made | |
| regularly. The exception inherits from :exc:`BaseException` so as to not be | |
| accidentally caught by code that catches :exc:`Exception` and thus prevent | |
| the interpreter from exiting. | |
| .. note:: | |
| Catching a :exc:`KeyboardInterrupt` requires special consideration. | |
| Because it can be raised at unpredictable points, it may, in some | |
| circumstances, leave the running program in an inconsistent state. It is | |
| generally best to allow :exc:`KeyboardInterrupt` to end the program as | |
| quickly as possible or avoid raising it entirely. (See | |
| :ref:`handlers-and-exceptions`.) | |
| .. exception:: MemoryError | |
| Raised when an operation runs out of memory but the situation may still be | |
| rescued (by deleting some objects). The associated value is a string indicating | |
| what kind of (internal) operation ran out of memory. Note that because of the | |
| underlying memory management architecture (C's :c:func:`malloc` function), the | |
| interpreter may not always be able to completely recover from this situation; it | |
| nevertheless raises an exception so that a stack traceback can be printed, in | |
| case a run-away program was the cause. | |
| .. exception:: NameError | |
| Raised when a local or global name is not found. This applies only to | |
| unqualified names. The associated value is an error message that includes the | |
| name that could not be found. | |
| The optional *name* keyword-only argument sets the attribute: | |
| .. attribute:: name | |
| The name of the variable that was attempted to be accessed. | |
| .. versionchanged:: 3.10 | |
| Added the :attr:`name` attribute. | |
| .. exception:: NotImplementedError | |
| This exception is derived from :exc:`RuntimeError`. In user defined base | |
| classes, abstract methods should raise this exception when they require | |
| derived classes to override the method, or while the class is being | |
| developed to indicate that the real implementation still needs to be added. | |
| .. note:: | |
| It should not be used to indicate that an operator or method is not | |
| meant to be supported at all -- in that case either leave the operator / | |
| method undefined or, if a subclass, set it to :data:`None`. | |
| .. caution:: | |
| :exc:`!NotImplementedError` and :data:`!NotImplemented` are not | |
| interchangeable. This exception should only be used as described | |
| above; see :data:`NotImplemented` for details on correct usage of | |
| the built-in constant. | |
| .. exception:: OSError([arg]) | |
| OSError(errno, strerror[, filename[, winerror[, filename2]]]) | |
| .. index:: pair: module; errno | |
| This exception is raised when a system function returns a system-related | |
| error, including I/O failures such as "file not found" or "disk full" | |
| (not for illegal argument types or other incidental errors). | |
| The second form of the constructor sets the corresponding attributes, | |
| described below. The attributes default to :const:`None` if not | |
| specified. For backwards compatibility, if three arguments are passed, | |
| the :attr:`~BaseException.args` attribute contains only a 2-tuple | |
| of the first two constructor arguments. | |
| The constructor often actually returns a subclass of :exc:`OSError`, as | |
| described in `OS exceptions`_ below. The particular subclass depends on | |
| the final :attr:`.errno` value. This behaviour only occurs when | |
| constructing :exc:`OSError` directly or via an alias, and is not | |
| inherited when subclassing. | |
| .. attribute:: errno | |
| A numeric error code from the C variable :c:data:`errno`. | |
| .. attribute:: winerror | |
| Under Windows, this gives you the native | |
| Windows error code. The :attr:`.errno` attribute is then an approximate | |
| translation, in POSIX terms, of that native error code. | |
| Under Windows, if the *winerror* constructor argument is an integer, | |
| the :attr:`.errno` attribute is determined from the Windows error code, | |
| and the *errno* argument is ignored. On other platforms, the | |
| *winerror* argument is ignored, and the :attr:`winerror` attribute | |
| does not exist. | |
| .. attribute:: strerror | |
| The corresponding error message, as provided by | |
| the operating system. It is formatted by the C | |
| functions :c:func:`!perror` under POSIX, and :c:func:`!FormatMessage` | |
| under Windows. | |
| .. attribute:: filename | |
| filename2 | |
| For exceptions that involve a file system path (such as :func:`open` or | |
| :func:`os.unlink`), :attr:`filename` is the file name passed to the function. | |
| For functions that involve two file system paths (such as | |
| :func:`os.rename`), :attr:`filename2` corresponds to the second | |
| file name passed to the function. | |
| .. versionchanged:: 3.3 | |
| :exc:`EnvironmentError`, :exc:`IOError`, :exc:`WindowsError`, | |
| :exc:`socket.error`, :exc:`select.error` and | |
| :exc:`!mmap.error` have been merged into :exc:`OSError`, and the | |
| constructor may return a subclass. | |
| .. versionchanged:: 3.4 | |
| The :attr:`filename` attribute is now the original file name passed to | |
| the function, instead of the name encoded to or decoded from the | |
| :term:`filesystem encoding and error handler`. Also, the *filename2* | |
| constructor argument and attribute was added. | |
| .. exception:: OverflowError | |
| Raised when the result of an arithmetic operation is too large to be | |
| represented. This cannot occur for integers (which would rather raise | |
| :exc:`MemoryError` than give up). However, for historical reasons, | |
| OverflowError is sometimes raised for integers that are outside a required | |
| range. Because of the lack of standardization of floating-point exception | |
| handling in C, most floating-point operations are not checked. | |
| .. exception:: PythonFinalizationError | |
| This exception is derived from :exc:`RuntimeError`. It is raised when | |
| an operation is blocked during interpreter shutdown also known as | |
| :term:`Python finalization <interpreter shutdown>`. | |
| Examples of operations which can be blocked with a | |
| :exc:`PythonFinalizationError` during the Python finalization: | |
| * Creating a new Python thread. | |
| * :meth:`Joining <threading.Thread.join>` a running daemon thread. | |
| * :func:`os.fork`, | |
| * acquiring a lock such as :class:`threading.Lock`, when it is known that | |
| the operation would otherwise deadlock. | |
| See also the :func:`sys.is_finalizing` function. | |
| .. versionadded:: 3.13 | |
| Previously, a plain :exc:`RuntimeError` was raised. | |
| .. versionchanged:: 3.14 | |
| :meth:`threading.Thread.join` can now raise this exception. | |
| .. versionchanged:: 3.15 | |
| This exception may be raised when acquiring :meth:`threading.Lock` | |
| or :meth:`threading.RLock`. | |
| .. exception:: RecursionError | |
| This exception is derived from :exc:`RuntimeError`. It is raised when the | |
| interpreter detects that the maximum recursion depth (see | |
| :func:`sys.getrecursionlimit`) is exceeded. | |
| .. versionadded:: 3.5 | |
| Previously, a plain :exc:`RuntimeError` was raised. | |
| .. exception:: ReferenceError | |
| This exception is raised when a weak reference proxy, created by the | |
| :func:`weakref.proxy` function, is used to access an attribute of the referent | |
| after it has been garbage collected. For more information on weak references, | |
| see the :mod:`weakref` module. | |
| .. exception:: RuntimeError | |
| Raised when an error is detected that doesn't fall in any of the other | |
| categories. The associated value is a string indicating what precisely went | |
| wrong. | |
| .. exception:: StopIteration | |
| Raised by built-in function :func:`next` and an :term:`iterator`\'s | |
| :meth:`~iterator.__next__` method to signal that there are no further | |
| items produced by the iterator. | |
| .. attribute:: StopIteration.value | |
| The exception object has a single attribute :attr:`!value`, which is | |
| given as an argument when constructing the exception, and defaults | |
| to :const:`None`. | |
| When a :term:`generator` or :term:`coroutine` function | |
| returns, a new :exc:`StopIteration` instance is | |
| raised, and the value returned by the function is used as the | |
| :attr:`value` parameter to the constructor of the exception. | |
| If a generator code directly or indirectly raises :exc:`StopIteration`, | |
| it is converted into a :exc:`RuntimeError` (retaining the | |
| :exc:`StopIteration` as the new exception's cause). | |
| .. versionchanged:: 3.3 | |
| Added ``value`` attribute and the ability for generator functions to | |
| use it to return a value. | |
| .. versionchanged:: 3.5 | |
| Introduced the RuntimeError transformation via | |
| ``from __future__ import generator_stop``, see :pep:`479`. | |
| .. versionchanged:: 3.7 | |
| Enable :pep:`479` for all code by default: a :exc:`StopIteration` | |
| error raised in a generator is transformed into a :exc:`RuntimeError`. | |
| .. exception:: StopAsyncIteration | |
| Must be raised by :meth:`~object.__anext__` method of an | |
| :term:`asynchronous iterator` object to stop the iteration. | |
| .. versionadded:: 3.5 | |
| .. exception:: SyntaxError(message, details) | |
| Raised when the parser encounters a syntax error. This may occur in an | |
| :keyword:`import` statement, in a call to the built-in functions | |
| :func:`compile`, :func:`exec`, | |
| or :func:`eval`, or when reading the initial script or standard input | |
| (also interactively). | |
| The :func:`str` of the exception instance returns only the error message. | |
| Details is a tuple whose members are also available as separate attributes. | |
| .. attribute:: filename | |
| The name of the file the syntax error occurred in. | |
| .. attribute:: lineno | |
| Which line number in the file the error occurred in. This is | |
| 1-indexed: the first line in the file has a ``lineno`` of 1. | |
| .. attribute:: offset | |
| The column in the line where the error occurred. This is | |
| 1-indexed: the first character in the line has an ``offset`` of 1. | |
| .. attribute:: text | |
| The source code text involved in the error. | |
| .. attribute:: end_lineno | |
| Which line number in the file the error occurred ends in. This is | |
| 1-indexed: the first line in the file has a ``lineno`` of 1. | |
| .. attribute:: end_offset | |
| The column in the end line where the error occurred finishes. This is | |
| 1-indexed: the first character in the line has an ``offset`` of 1. | |
| For errors in f-string fields, the message is prefixed by "f-string: " | |
| and the offsets are offsets in a text constructed from the replacement | |
| expression. For example, compiling f'Bad {a b} field' results in this | |
| args attribute: ('f-string: ...', ('', 1, 2, '(a b)\n', 1, 5)). | |
| .. versionchanged:: 3.10 | |
| Added the :attr:`end_lineno` and :attr:`end_offset` attributes. | |
| .. exception:: IndentationError | |
| Base class for syntax errors related to incorrect indentation. This is a | |
| subclass of :exc:`SyntaxError`. | |
| .. exception:: TabError | |
| Raised when indentation contains an inconsistent use of tabs and spaces. | |
| This is a subclass of :exc:`IndentationError`. | |
| .. exception:: SystemError | |
| Raised when the interpreter finds an internal error, but the situation does not | |
| look so serious to cause it to abandon all hope. The associated value is a | |
| string indicating what went wrong (in low-level terms). In :term:`CPython`, | |
| this could be raised by incorrectly using Python's C API, such as returning | |
| a ``NULL`` value without an exception set. | |
| If you're confident that this exception wasn't your fault, or the fault of | |
| a package you're using, you should report this to the author or maintainer | |
| of your Python interpreter. | |
| Be sure to report the version of the Python interpreter (``sys.version``; it is | |
| also printed at the start of an interactive Python session), the exact error | |
| message (the exception's associated value) and if possible the source of the | |
| program that triggered the error. | |
| .. exception:: SystemExit | |
| This exception is raised by the :func:`sys.exit` function. It inherits from | |
| :exc:`BaseException` instead of :exc:`Exception` so that it is not accidentally | |
| caught by code that catches :exc:`Exception`. This allows the exception to | |
| properly propagate up and cause the interpreter to exit. When it is not | |
| handled, the Python interpreter exits; no stack traceback is printed. The | |
| constructor accepts the same optional argument passed to :func:`sys.exit`. | |
| If the value is an integer, it specifies the system exit status (passed to | |
| C's :c:func:`!exit` function); if it is ``None``, the exit status is zero; if | |
| it has another type (such as a string), the object's value is printed and | |
| the exit status is one. | |
| A call to :func:`sys.exit` is translated into an exception so that clean-up | |
| handlers (:keyword:`finally` clauses of :keyword:`try` statements) can be | |
| executed, and so that a debugger can execute a script without running the risk | |
| of losing control. The :func:`os._exit` function can be used if it is | |
| absolutely positively necessary to exit immediately (for example, in the child | |
| process after a call to :func:`os.fork`). | |
| .. attribute:: code | |
| The exit status or error message that is passed to the constructor. | |
| (Defaults to ``None``.) | |
| .. exception:: TypeError | |
| Raised when an operation or function is applied to an object of inappropriate | |
| type. The associated value is a string giving details about the type mismatch. | |
| This exception may be raised by user code to indicate that an attempted | |
| operation on an object is not supported, and is not meant to be. If an object | |
| is meant to support a given operation but has not yet provided an | |
| implementation, :exc:`NotImplementedError` is the proper exception to raise. | |
| Passing arguments of the wrong type (e.g. passing a :class:`list` when an | |
| :class:`int` is expected) should result in a :exc:`TypeError`, but passing | |
| arguments with the wrong value (e.g. a number outside expected boundaries) | |
| should result in a :exc:`ValueError`. | |
| .. exception:: UnboundLocalError | |
| Raised when a reference is made to a local variable in a function or method, but | |
| no value has been bound to that variable. This is a subclass of | |
| :exc:`NameError`. | |
| .. exception:: UnicodeError | |
| Raised when a Unicode-related encoding or decoding error occurs. It is a | |
| subclass of :exc:`ValueError`. | |
| :exc:`UnicodeError` has attributes that describe the encoding or decoding | |
| error. For example, ``err.object[err.start:err.end]`` gives the particular | |
| invalid input that the codec failed on. | |
| .. attribute:: encoding | |
| The name of the encoding that raised the error. | |
| .. attribute:: reason | |
| A string describing the specific codec error. | |
| .. attribute:: object | |
| The object the codec was attempting to encode or decode. | |
| .. attribute:: start | |
| The first index of invalid data in :attr:`object`. | |
| This value should not be negative as it is interpreted as an | |
| absolute offset but this constraint is not enforced at runtime. | |
| .. attribute:: end | |
| The index after the last invalid data in :attr:`object`. | |
| This value should not be negative as it is interpreted as an | |
| absolute offset but this constraint is not enforced at runtime. | |
| .. exception:: UnicodeEncodeError | |
| Raised when a Unicode-related error occurs during encoding. It is a subclass of | |
| :exc:`UnicodeError`. | |
| .. exception:: UnicodeDecodeError | |
| Raised when a Unicode-related error occurs during decoding. It is a subclass of | |
| :exc:`UnicodeError`. | |
| .. exception:: UnicodeTranslateError | |
| Raised when a Unicode-related error occurs during translating. It is a subclass | |
| of :exc:`UnicodeError`. | |
| .. exception:: ValueError | |
| Raised when an operation or function receives an argument that has the | |
| right type but an inappropriate value, and the situation is not described by a | |
| more precise exception such as :exc:`IndexError`. | |
| .. exception:: ZeroDivisionError | |
| Raised when the second argument of a division or modulo operation is zero. The | |
| associated value is a string indicating the type of the operands and the | |
| operation. | |
| The following exceptions are kept for compatibility with previous versions; | |
| starting from Python 3.3, they are aliases of :exc:`OSError`. | |
| .. exception:: EnvironmentError | |
| .. exception:: IOError | |
| .. exception:: WindowsError | |
| Only available on Windows. | |
| OS exceptions | |
| ^^^^^^^^^^^^^ | |
| The following exceptions are subclasses of :exc:`OSError`, they get raised | |
| depending on the system error code. | |
| .. exception:: BlockingIOError | |
| Raised when an operation would block on an object (e.g. socket) set | |
| for non-blocking operation. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.EAGAIN`, :py:const:`~errno.EALREADY`, | |
| :py:const:`~errno.EWOULDBLOCK` and :py:const:`~errno.EINPROGRESS`. | |
| In addition to those of :exc:`OSError`, :exc:`BlockingIOError` can have | |
| one more attribute: | |
| .. attribute:: characters_written | |
| An integer containing the number of **bytes** written to the stream | |
| before it blocked. This attribute is available when using the | |
| buffered I/O classes from the :mod:`io` module. | |
| .. exception:: ChildProcessError | |
| Raised when an operation on a child process failed. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.ECHILD`. | |
| .. exception:: ConnectionError | |
| A base class for connection-related issues. | |
| Subclasses are :exc:`BrokenPipeError`, :exc:`ConnectionAbortedError`, | |
| :exc:`ConnectionRefusedError` and :exc:`ConnectionResetError`. | |
| .. exception:: BrokenPipeError | |
| A subclass of :exc:`ConnectionError`, raised when trying to write on a | |
| pipe while the other end has been closed, or trying to write on a socket | |
| which has been shutdown for writing. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.EPIPE` and :py:const:`~errno.ESHUTDOWN`. | |
| .. exception:: ConnectionAbortedError | |
| A subclass of :exc:`ConnectionError`, raised when a connection attempt | |
| is aborted by the peer. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.ECONNABORTED`. | |
| .. exception:: ConnectionRefusedError | |
| A subclass of :exc:`ConnectionError`, raised when a connection attempt | |
| is refused by the peer. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.ECONNREFUSED`. | |
| .. exception:: ConnectionResetError | |
| A subclass of :exc:`ConnectionError`, raised when a connection is | |
| reset by the peer. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.ECONNRESET`. | |
| .. exception:: FileExistsError | |
| Raised when trying to create a file or directory which already exists. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.EEXIST`. | |
| .. exception:: FileNotFoundError | |
| Raised when a file or directory is requested but doesn't exist. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.ENOENT`. | |
| .. exception:: InterruptedError | |
| Raised when a system call is interrupted by an incoming signal. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.EINTR`. | |
| .. versionchanged:: 3.5 | |
| Python now retries system calls when a syscall is interrupted by a | |
| signal, except if the signal handler raises an exception (see :pep:`475` | |
| for the rationale), instead of raising :exc:`InterruptedError`. | |
| .. exception:: IsADirectoryError | |
| Raised when a file operation (such as :func:`os.remove`) is requested | |
| on a directory. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.EISDIR`. | |
| .. exception:: NotADirectoryError | |
| Raised when a directory operation (such as :func:`os.listdir`) is requested on | |
| something which is not a directory. On most POSIX platforms, it may also be | |
| raised if an operation attempts to open or traverse a non-directory file as if | |
| it were a directory. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.ENOTDIR`. | |
| .. exception:: PermissionError | |
| Raised when trying to run an operation without the adequate access | |
| rights - for example filesystem permissions. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.EACCES`, | |
| :py:const:`~errno.EPERM`, and :py:const:`~errno.ENOTCAPABLE`. | |
| .. versionchanged:: 3.11.1 | |
| WASI's :py:const:`~errno.ENOTCAPABLE` is now mapped to | |
| :exc:`PermissionError`. | |
| .. exception:: ProcessLookupError | |
| Raised when a given process doesn't exist. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.ESRCH`. | |
| .. exception:: TimeoutError | |
| Raised when a system function timed out at the system level. | |
| Corresponds to :c:data:`errno` :py:const:`~errno.ETIMEDOUT`. | |
| .. versionadded:: 3.3 | |
| All the above :exc:`OSError` subclasses were added. | |
| .. seealso:: | |
| :pep:`3151` - Reworking the OS and IO exception hierarchy | |
| .. _warning-categories-as-exceptions: | |
| Warnings | |
| -------- | |
| The following exceptions are used as warning categories; see the | |
| :ref:`warning-categories` documentation for more details. | |
| .. exception:: Warning | |
| Base class for warning categories. | |
| .. exception:: UserWarning | |
| Base class for warnings generated by user code. | |
| .. exception:: DeprecationWarning | |
| Base class for warnings about deprecated features when those warnings are | |
| intended for other Python developers. | |
| Ignored by the default warning filters, except in the ``__main__`` module | |
| (:pep:`565`). Enabling the :ref:`Python Development Mode <devmode>` shows | |
| this warning. | |
| The deprecation policy is described in :pep:`387`. | |
| .. exception:: PendingDeprecationWarning | |
| Base class for warnings about features which are obsolete and | |
| expected to be deprecated in the future, but are not deprecated | |
| at the moment. | |
| This class is rarely used as emitting a warning about a possible | |
| upcoming deprecation is unusual, and :exc:`DeprecationWarning` | |
| is preferred for already active deprecations. | |
| Ignored by the default warning filters. Enabling the :ref:`Python | |
| Development Mode <devmode>` shows this warning. | |
| The deprecation policy is described in :pep:`387`. | |
| .. exception:: SyntaxWarning | |
| Base class for warnings about dubious syntax. | |
| This warning is typically emitted when compiling Python source code, and usually won't be reported | |
| when running already compiled code. | |
| .. exception:: RuntimeWarning | |
| Base class for warnings about dubious runtime behavior. | |
| .. exception:: FutureWarning | |
| Base class for warnings about deprecated features when those warnings are | |
| intended for end users of applications that are written in Python. | |
| .. exception:: ImportWarning | |
| Base class for warnings about probable mistakes in module imports. | |
| Ignored by the default warning filters. Enabling the :ref:`Python | |
| Development Mode <devmode>` shows this warning. | |
| .. exception:: UnicodeWarning | |
| Base class for warnings related to Unicode. | |
| .. exception:: EncodingWarning | |
| Base class for warnings related to encodings. | |
| See :ref:`io-encoding-warning` for details. | |
| .. versionadded:: 3.10 | |
| .. exception:: BytesWarning | |
| Base class for warnings related to :class:`bytes` and :class:`bytearray`. | |
| .. exception:: ResourceWarning | |
| Base class for warnings related to resource usage. | |
| Ignored by the default warning filters. Enabling the :ref:`Python | |
| Development Mode <devmode>` shows this warning. | |
| .. versionadded:: 3.2 | |
| .. _lib-exception-groups: | |
| Exception groups | |
| ---------------- | |
| The following are used when it is necessary to raise multiple unrelated | |
| exceptions. They are part of the exception hierarchy so they can be | |
| handled with :keyword:`except` like all other exceptions. In addition, | |
| they are recognised by :keyword:`except*<except_star>`, which matches | |
| their subgroups based on the types of the contained exceptions. | |
| .. exception:: ExceptionGroup(msg, excs) | |
| .. exception:: BaseExceptionGroup(msg, excs) | |
| Both of these exception types wrap the exceptions in the sequence ``excs``. | |
| The ``msg`` parameter must be a string. The difference between the two | |
| classes is that :exc:`BaseExceptionGroup` extends :exc:`BaseException` and | |
| it can wrap any exception, while :exc:`ExceptionGroup` extends :exc:`Exception` | |
| and it can only wrap subclasses of :exc:`Exception`. This design is so that | |
| ``except Exception`` catches an :exc:`ExceptionGroup` but not | |
| :exc:`BaseExceptionGroup`. | |
| The :exc:`BaseExceptionGroup` constructor returns an :exc:`ExceptionGroup` | |
| rather than a :exc:`BaseExceptionGroup` if all contained exceptions are | |
| :exc:`Exception` instances, so it can be used to make the selection | |
| automatic. The :exc:`ExceptionGroup` constructor, on the other hand, | |
| raises a :exc:`TypeError` if any contained exception is not an | |
| :exc:`Exception` subclass. | |
| Exception groups are :ref:`generic <generics>` over the type of their | |
| contained exceptions. | |
| .. impl-detail:: | |
| The ``excs`` parameter may be any sequence, but lists and tuples are | |
| specifically processed more efficiently here. For optimal performance, | |
| pass a tuple as ``excs``. | |
| .. attribute:: message | |
| The ``msg`` argument to the constructor. This is a read-only attribute. | |
| .. attribute:: exceptions | |
| A tuple of the exceptions in the ``excs`` sequence given to the | |
| constructor. This is a read-only attribute. | |
| .. method:: subgroup(condition) | |
| Returns an exception group that contains only the exceptions from the | |
| current group that match *condition*, or ``None`` if the result is empty. | |
| The condition can be an exception type or tuple of exception types, in which | |
| case each exception is checked for a match using the same check that is used | |
| in an ``except`` clause. The condition can also be a callable (other than | |
| a type object) that accepts an exception as its single argument and returns | |
| true for the exceptions that should be in the subgroup. | |
| The nesting structure of the current exception is preserved in the result, | |
| as are the values of its :attr:`message`, | |
| :attr:`~BaseException.__traceback__`, :attr:`~BaseException.__cause__`, | |
| :attr:`~BaseException.__context__` and | |
| :attr:`~BaseException.__notes__` fields. | |
| Empty nested groups are omitted from the result. | |
| The condition is checked for all exceptions in the nested exception group, | |
| including the top-level and any nested exception groups. If the condition is | |
| true for such an exception group, it is included in the result in full. | |
| .. versionadded:: 3.13 | |
| ``condition`` can be any callable which is not a type object. | |
| .. method:: split(condition) | |
| Like :meth:`subgroup`, but returns the pair ``(match, rest)`` where ``match`` | |
| is ``subgroup(condition)`` and ``rest`` is the remaining non-matching | |
| part. | |
| .. method:: derive(excs) | |
| Returns an exception group with the same :attr:`message`, but which | |
| wraps the exceptions in ``excs``. | |
| This method is used by :meth:`subgroup` and :meth:`split`, which | |
| are used in various contexts to break up an exception group. A | |
| subclass needs to override it in order to make :meth:`subgroup` | |
| and :meth:`split` return instances of the subclass rather | |
| than :exc:`ExceptionGroup`. | |
| :meth:`subgroup` and :meth:`split` copy the | |
| :attr:`~BaseException.__traceback__`, | |
| :attr:`~BaseException.__cause__`, :attr:`~BaseException.__context__` and | |
| :attr:`~BaseException.__notes__` fields from | |
| the original exception group to the one returned by :meth:`derive`, so | |
| these fields do not need to be updated by :meth:`derive`. | |
| .. doctest:: | |
| >>> class MyGroup(ExceptionGroup): | |
| ... def derive(self, excs): | |
| ... return MyGroup(self.message, excs) | |
| ... | |
| >>> e = MyGroup("eg", [ValueError(1), TypeError(2)]) | |
| >>> e.add_note("a note") | |
| >>> e.__context__ = Exception("context") | |
| >>> e.__cause__ = Exception("cause") | |
| >>> try: | |
| ... raise e | |
| ... except Exception as e: | |
| ... exc = e | |
| ... | |
| >>> match, rest = exc.split(ValueError) | |
| >>> exc, exc.__context__, exc.__cause__, exc.__notes__ | |
| (MyGroup('eg', [ValueError(1), TypeError(2)]), Exception('context'), Exception('cause'), ['a note']) | |
| >>> match, match.__context__, match.__cause__, match.__notes__ | |
| (MyGroup('eg', [ValueError(1)]), Exception('context'), Exception('cause'), ['a note']) | |
| >>> rest, rest.__context__, rest.__cause__, rest.__notes__ | |
| (MyGroup('eg', [TypeError(2)]), Exception('context'), Exception('cause'), ['a note']) | |
| >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__ | |
| True | |
| Note that :exc:`BaseExceptionGroup` defines :meth:`~object.__new__`, so | |
| subclasses that need a different constructor signature need to | |
| override that rather than :meth:`~object.__init__`. For example, the following | |
| defines an exception group subclass which accepts an exit_code and | |
| constructs the group's message from it. :: | |
| class Errors(ExceptionGroup): | |
| def __new__(cls, errors, exit_code): | |
| self = super().__new__(Errors, f"exit code: {exit_code}", errors) | |
| self.exit_code = exit_code | |
| return self | |
| def derive(self, excs): | |
| return Errors(excs, self.exit_code) | |
| Like :exc:`ExceptionGroup`, any subclass of :exc:`BaseExceptionGroup` which | |
| is also a subclass of :exc:`Exception` can only wrap instances of | |
| :exc:`Exception`. | |
| .. versionadded:: 3.11 | |
| Exception hierarchy | |
| ------------------- | |
| The class hierarchy for built-in exceptions is: | |
| .. literalinclude:: ../../Lib/test/exception_hierarchy.txt | |
| :language: text |