mirror of https://github.com/python/cpython
1059 lines
38 KiB
ReStructuredText
1059 lines
38 KiB
ReStructuredText
.. _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 :attr:`name` and :attr:`obj` attributes can be set using keyword-only
|
|
arguments to the constructor. When set they represent the name of the attribute
|
|
that was attempted to be accessed and the object that was accessed for said
|
|
attribute, respectively.
|
|
|
|
.. 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. (N.B.: the :meth:`io.IOBase.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:: 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 :attr:`name` attribute can be set using a keyword-only argument to the
|
|
constructor. When set it represent 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`.
|
|
|
|
.. note::
|
|
|
|
``NotImplementedError`` and :data:`NotImplemented` are not interchangeable,
|
|
even though they have similar names and purposes. See
|
|
:data:`!NotImplemented` for details on when to use it.
|
|
|
|
.. 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.
|
|
* :func:`os.fork`.
|
|
|
|
See also the :func:`sys.is_finalizing` function.
|
|
|
|
.. versionadded:: 3.13
|
|
Previously, a plain :exc:`RuntimeError` was raised.
|
|
|
|
|
|
.. 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).
|
|
|
|
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`.
|
|
|
|
.. attribute:: end
|
|
|
|
The index after the last invalid data in :attr:`object`.
|
|
|
|
|
|
.. 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 characters 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.
|
|
|
|
|
|
.. 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.
|
|
|
|
.. 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`. 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
|
|
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
|