17db96d56Sopenharmony_ci.. _bltin-exceptions:
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ciBuilt-in Exceptions
47db96d56Sopenharmony_ci===================
57db96d56Sopenharmony_ci
67db96d56Sopenharmony_ci.. index::
77db96d56Sopenharmony_ci   pair: statement; try
87db96d56Sopenharmony_ci   pair: statement; except
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ciIn Python, all exceptions must be instances of a class that derives from
117db96d56Sopenharmony_ci:class:`BaseException`.  In a :keyword:`try` statement with an :keyword:`except`
127db96d56Sopenharmony_ciclause that mentions a particular class, that clause also handles any exception
137db96d56Sopenharmony_ciclasses derived from that class (but not exception classes from which *it* is
147db96d56Sopenharmony_ciderived).  Two exception classes that are not related via subclassing are never
157db96d56Sopenharmony_ciequivalent, even if they have the same name.
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ci.. index:: pair: statement; raise
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_ciThe built-in exceptions listed below can be generated by the interpreter or
207db96d56Sopenharmony_cibuilt-in functions.  Except where mentioned, they have an "associated value"
217db96d56Sopenharmony_ciindicating the detailed cause of the error.  This may be a string or a tuple of
227db96d56Sopenharmony_ciseveral items of information (e.g., an error code and a string explaining the
237db96d56Sopenharmony_cicode).  The associated value is usually passed as arguments to the exception
247db96d56Sopenharmony_ciclass's constructor.
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ciUser code can raise built-in exceptions.  This can be used to test an exception
277db96d56Sopenharmony_cihandler or to report an error condition "just like" the situation in which the
287db96d56Sopenharmony_ciinterpreter raises the same exception; but beware that there is nothing to
297db96d56Sopenharmony_ciprevent user code from raising an inappropriate error.
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ciThe built-in exception classes can be subclassed to define new exceptions;
327db96d56Sopenharmony_ciprogrammers are encouraged to derive new exceptions from the :exc:`Exception`
337db96d56Sopenharmony_ciclass or one of its subclasses, and not from :exc:`BaseException`.  More
347db96d56Sopenharmony_ciinformation on defining exceptions is available in the Python Tutorial under
357db96d56Sopenharmony_ci:ref:`tut-userexceptions`.
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ciException context
397db96d56Sopenharmony_ci-----------------
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ciWhen raising a new exception while another exception
427db96d56Sopenharmony_ciis already being handled, the new exception's
437db96d56Sopenharmony_ci:attr:`__context__` attribute is automatically set to the handled
447db96d56Sopenharmony_ciexception.  An exception may be handled when an :keyword:`except` or
457db96d56Sopenharmony_ci:keyword:`finally` clause, or a :keyword:`with` statement, is used.
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ciThis implicit exception context can be
487db96d56Sopenharmony_cisupplemented with an explicit cause by using :keyword:`!from` with
497db96d56Sopenharmony_ci:keyword:`raise`::
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci   raise new_exc from original_exc
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ciThe expression following :keyword:`from<raise>` must be an exception or ``None``. It
547db96d56Sopenharmony_ciwill be set as :attr:`__cause__` on the raised exception. Setting
557db96d56Sopenharmony_ci:attr:`__cause__` also implicitly sets the :attr:`__suppress_context__`
567db96d56Sopenharmony_ciattribute to ``True``, so that using ``raise new_exc from None``
577db96d56Sopenharmony_cieffectively replaces the old exception with the new one for display
587db96d56Sopenharmony_cipurposes (e.g. converting :exc:`KeyError` to :exc:`AttributeError`), while
597db96d56Sopenharmony_cileaving the old exception available in :attr:`__context__` for introspection
607db96d56Sopenharmony_ciwhen debugging.
617db96d56Sopenharmony_ci
627db96d56Sopenharmony_ciThe default traceback display code shows these chained exceptions in
637db96d56Sopenharmony_ciaddition to the traceback for the exception itself. An explicitly chained
647db96d56Sopenharmony_ciexception in :attr:`__cause__` is always shown when present. An implicitly
657db96d56Sopenharmony_cichained exception in :attr:`__context__` is shown only if :attr:`__cause__`
667db96d56Sopenharmony_ciis :const:`None` and :attr:`__suppress_context__` is false.
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ciIn either case, the exception itself is always shown after any chained
697db96d56Sopenharmony_ciexceptions so that the final line of the traceback always shows the last
707db96d56Sopenharmony_ciexception that was raised.
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ciInheriting from built-in exceptions
747db96d56Sopenharmony_ci-----------------------------------
757db96d56Sopenharmony_ci
767db96d56Sopenharmony_ciUser code can create subclasses that inherit from an exception type.
777db96d56Sopenharmony_ciIt's recommended to only subclass one exception type at a time to avoid
787db96d56Sopenharmony_ciany possible conflicts between how the bases handle the ``args``
797db96d56Sopenharmony_ciattribute, as well as due to possible memory layout incompatibilities.
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci.. impl-detail::
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci   Most built-in exceptions are implemented in C for efficiency, see:
847db96d56Sopenharmony_ci   :source:`Objects/exceptions.c`.  Some have custom memory layouts
857db96d56Sopenharmony_ci   which makes it impossible to create a subclass that inherits from
867db96d56Sopenharmony_ci   multiple exception types. The memory layout of a type is an implementation
877db96d56Sopenharmony_ci   detail and might change between Python versions, leading to new
887db96d56Sopenharmony_ci   conflicts in the future.  Therefore, it's recommended to avoid
897db96d56Sopenharmony_ci   subclassing multiple exception types altogether.
907db96d56Sopenharmony_ci
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ciBase classes
937db96d56Sopenharmony_ci------------
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ciThe following exceptions are used mostly as base classes for other exceptions.
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci.. exception:: BaseException
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci   The base class for all built-in exceptions.  It is not meant to be directly
1007db96d56Sopenharmony_ci   inherited by user-defined classes (for that, use :exc:`Exception`).  If
1017db96d56Sopenharmony_ci   :func:`str` is called on an instance of this class, the representation of
1027db96d56Sopenharmony_ci   the argument(s) to the instance are returned, or the empty string when
1037db96d56Sopenharmony_ci   there were no arguments.
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci   .. attribute:: args
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci      The tuple of arguments given to the exception constructor.  Some built-in
1087db96d56Sopenharmony_ci      exceptions (like :exc:`OSError`) expect a certain number of arguments and
1097db96d56Sopenharmony_ci      assign a special meaning to the elements of this tuple, while others are
1107db96d56Sopenharmony_ci      usually called only with a single string giving an error message.
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci   .. method:: with_traceback(tb)
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci      This method sets *tb* as the new traceback for the exception and returns
1157db96d56Sopenharmony_ci      the exception object.  It was more commonly used before the exception
1167db96d56Sopenharmony_ci      chaining features of :pep:`3134` became available.  The following example
1177db96d56Sopenharmony_ci      shows how we can convert an instance of ``SomeException`` into an
1187db96d56Sopenharmony_ci      instance of ``OtherException`` while preserving the traceback.  Once
1197db96d56Sopenharmony_ci      raised, the current frame is pushed onto the traceback of the
1207db96d56Sopenharmony_ci      ``OtherException``, as would have happened to the traceback of the
1217db96d56Sopenharmony_ci      original ``SomeException`` had we allowed it to propagate to the caller. ::
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci         try:
1247db96d56Sopenharmony_ci             ...
1257db96d56Sopenharmony_ci         except SomeException:
1267db96d56Sopenharmony_ci             tb = sys.exception().__traceback__
1277db96d56Sopenharmony_ci             raise OtherException(...).with_traceback(tb)
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci   .. method:: add_note(note)
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci      Add the string ``note`` to the exception's notes which appear in the standard
1327db96d56Sopenharmony_ci      traceback after the exception string. A :exc:`TypeError` is raised if ``note``
1337db96d56Sopenharmony_ci      is not a string.
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ci      .. versionadded:: 3.11
1367db96d56Sopenharmony_ci
1377db96d56Sopenharmony_ci   .. attribute:: __notes__
1387db96d56Sopenharmony_ci
1397db96d56Sopenharmony_ci      A list of the notes of this exception, which were added with :meth:`add_note`.
1407db96d56Sopenharmony_ci      This attribute is created when :meth:`add_note` is called.
1417db96d56Sopenharmony_ci
1427db96d56Sopenharmony_ci      .. versionadded:: 3.11
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ci
1457db96d56Sopenharmony_ci.. exception:: Exception
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ci   All built-in, non-system-exiting exceptions are derived from this class.  All
1487db96d56Sopenharmony_ci   user-defined exceptions should also be derived from this class.
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci.. exception:: ArithmeticError
1527db96d56Sopenharmony_ci
1537db96d56Sopenharmony_ci   The base class for those built-in exceptions that are raised for various
1547db96d56Sopenharmony_ci   arithmetic errors: :exc:`OverflowError`, :exc:`ZeroDivisionError`,
1557db96d56Sopenharmony_ci   :exc:`FloatingPointError`.
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci
1587db96d56Sopenharmony_ci.. exception:: BufferError
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_ci   Raised when a :ref:`buffer <bufferobjects>` related operation cannot be
1617db96d56Sopenharmony_ci   performed.
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci.. exception:: LookupError
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci   The base class for the exceptions that are raised when a key or index used on
1677db96d56Sopenharmony_ci   a mapping or sequence is invalid: :exc:`IndexError`, :exc:`KeyError`.  This
1687db96d56Sopenharmony_ci   can be raised directly by :func:`codecs.lookup`.
1697db96d56Sopenharmony_ci
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ciConcrete exceptions
1727db96d56Sopenharmony_ci-------------------
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_ciThe following exceptions are the exceptions that are usually raised.
1757db96d56Sopenharmony_ci
1767db96d56Sopenharmony_ci.. exception:: AssertionError
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci   .. index:: pair: statement; assert
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ci   Raised when an :keyword:`assert` statement fails.
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ci
1837db96d56Sopenharmony_ci.. exception:: AttributeError
1847db96d56Sopenharmony_ci
1857db96d56Sopenharmony_ci   Raised when an attribute reference (see :ref:`attribute-references`) or
1867db96d56Sopenharmony_ci   assignment fails.  (When an object does not support attribute references or
1877db96d56Sopenharmony_ci   attribute assignments at all, :exc:`TypeError` is raised.)
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci   The :attr:`name` and :attr:`obj` attributes can be set using keyword-only
1907db96d56Sopenharmony_ci   arguments to the constructor. When set they represent the name of the attribute
1917db96d56Sopenharmony_ci   that was attempted to be accessed and the object that was accessed for said
1927db96d56Sopenharmony_ci   attribute, respectively.
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ci   .. versionchanged:: 3.10
1957db96d56Sopenharmony_ci      Added the :attr:`name` and :attr:`obj` attributes.
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci.. exception:: EOFError
1987db96d56Sopenharmony_ci
1997db96d56Sopenharmony_ci   Raised when the :func:`input` function hits an end-of-file condition (EOF)
2007db96d56Sopenharmony_ci   without reading any data. (N.B.: the :meth:`io.IOBase.read` and
2017db96d56Sopenharmony_ci   :meth:`io.IOBase.readline` methods return an empty string when they hit EOF.)
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci
2047db96d56Sopenharmony_ci.. exception:: FloatingPointError
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ci   Not currently used.
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci
2097db96d56Sopenharmony_ci.. exception:: GeneratorExit
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci   Raised when a :term:`generator` or :term:`coroutine` is closed;
2127db96d56Sopenharmony_ci   see :meth:`generator.close` and :meth:`coroutine.close`.  It
2137db96d56Sopenharmony_ci   directly inherits from :exc:`BaseException` instead of :exc:`Exception` since
2147db96d56Sopenharmony_ci   it is technically not an error.
2157db96d56Sopenharmony_ci
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci.. exception:: ImportError
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci   Raised when the :keyword:`import` statement has troubles trying to
2207db96d56Sopenharmony_ci   load a module.  Also raised when the "from list" in ``from ... import``
2217db96d56Sopenharmony_ci   has a name that cannot be found.
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ci   The :attr:`name` and :attr:`path` attributes can be set using keyword-only
2247db96d56Sopenharmony_ci   arguments to the constructor. When set they represent the name of the module
2257db96d56Sopenharmony_ci   that was attempted to be imported and the path to any file which triggered
2267db96d56Sopenharmony_ci   the exception, respectively.
2277db96d56Sopenharmony_ci
2287db96d56Sopenharmony_ci   .. versionchanged:: 3.3
2297db96d56Sopenharmony_ci      Added the :attr:`name` and :attr:`path` attributes.
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci.. exception:: ModuleNotFoundError
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci   A subclass of :exc:`ImportError` which is raised by :keyword:`import`
2347db96d56Sopenharmony_ci   when a module could not be located.  It is also raised when ``None``
2357db96d56Sopenharmony_ci   is found in :data:`sys.modules`.
2367db96d56Sopenharmony_ci
2377db96d56Sopenharmony_ci   .. versionadded:: 3.6
2387db96d56Sopenharmony_ci
2397db96d56Sopenharmony_ci
2407db96d56Sopenharmony_ci.. exception:: IndexError
2417db96d56Sopenharmony_ci
2427db96d56Sopenharmony_ci   Raised when a sequence subscript is out of range.  (Slice indices are
2437db96d56Sopenharmony_ci   silently truncated to fall in the allowed range; if an index is not an
2447db96d56Sopenharmony_ci   integer, :exc:`TypeError` is raised.)
2457db96d56Sopenharmony_ci
2467db96d56Sopenharmony_ci   .. XXX xref to sequences
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci
2497db96d56Sopenharmony_ci.. exception:: KeyError
2507db96d56Sopenharmony_ci
2517db96d56Sopenharmony_ci   Raised when a mapping (dictionary) key is not found in the set of existing keys.
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ci   .. XXX xref to mapping objects?
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ci.. exception:: KeyboardInterrupt
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_ci   Raised when the user hits the interrupt key (normally :kbd:`Control-C` or
2597db96d56Sopenharmony_ci   :kbd:`Delete`).  During execution, a check for interrupts is made
2607db96d56Sopenharmony_ci   regularly. The exception inherits from :exc:`BaseException` so as to not be
2617db96d56Sopenharmony_ci   accidentally caught by code that catches :exc:`Exception` and thus prevent
2627db96d56Sopenharmony_ci   the interpreter from exiting.
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ci   .. note::
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ci      Catching a :exc:`KeyboardInterrupt` requires special consideration.
2677db96d56Sopenharmony_ci      Because it can be raised at unpredictable points, it may, in some
2687db96d56Sopenharmony_ci      circumstances, leave the running program in an inconsistent state. It is
2697db96d56Sopenharmony_ci      generally best to allow :exc:`KeyboardInterrupt` to end the program as
2707db96d56Sopenharmony_ci      quickly as possible or avoid raising it entirely. (See
2717db96d56Sopenharmony_ci      :ref:`handlers-and-exceptions`.)
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci
2747db96d56Sopenharmony_ci.. exception:: MemoryError
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ci   Raised when an operation runs out of memory but the situation may still be
2777db96d56Sopenharmony_ci   rescued (by deleting some objects).  The associated value is a string indicating
2787db96d56Sopenharmony_ci   what kind of (internal) operation ran out of memory. Note that because of the
2797db96d56Sopenharmony_ci   underlying memory management architecture (C's :c:func:`malloc` function), the
2807db96d56Sopenharmony_ci   interpreter may not always be able to completely recover from this situation; it
2817db96d56Sopenharmony_ci   nevertheless raises an exception so that a stack traceback can be printed, in
2827db96d56Sopenharmony_ci   case a run-away program was the cause.
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ci
2857db96d56Sopenharmony_ci.. exception:: NameError
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ci   Raised when a local or global name is not found.  This applies only to
2887db96d56Sopenharmony_ci   unqualified names.  The associated value is an error message that includes the
2897db96d56Sopenharmony_ci   name that could not be found.
2907db96d56Sopenharmony_ci
2917db96d56Sopenharmony_ci   The :attr:`name` attribute can be set using a keyword-only argument to the
2927db96d56Sopenharmony_ci   constructor. When set it represent the name of the variable that was attempted
2937db96d56Sopenharmony_ci   to be accessed.
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci   .. versionchanged:: 3.10
2967db96d56Sopenharmony_ci      Added the :attr:`name` attribute.
2977db96d56Sopenharmony_ci
2987db96d56Sopenharmony_ci
2997db96d56Sopenharmony_ci.. exception:: NotImplementedError
3007db96d56Sopenharmony_ci
3017db96d56Sopenharmony_ci   This exception is derived from :exc:`RuntimeError`.  In user defined base
3027db96d56Sopenharmony_ci   classes, abstract methods should raise this exception when they require
3037db96d56Sopenharmony_ci   derived classes to override the method, or while the class is being
3047db96d56Sopenharmony_ci   developed to indicate that the real implementation still needs to be added.
3057db96d56Sopenharmony_ci
3067db96d56Sopenharmony_ci   .. note::
3077db96d56Sopenharmony_ci
3087db96d56Sopenharmony_ci      It should not be used to indicate that an operator or method is not
3097db96d56Sopenharmony_ci      meant to be supported at all -- in that case either leave the operator /
3107db96d56Sopenharmony_ci      method undefined or, if a subclass, set it to :data:`None`.
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ci   .. note::
3137db96d56Sopenharmony_ci
3147db96d56Sopenharmony_ci      ``NotImplementedError`` and ``NotImplemented`` are not interchangeable,
3157db96d56Sopenharmony_ci      even though they have similar names and purposes.  See
3167db96d56Sopenharmony_ci      :data:`NotImplemented` for details on when to use it.
3177db96d56Sopenharmony_ci
3187db96d56Sopenharmony_ci.. exception:: OSError([arg])
3197db96d56Sopenharmony_ci               OSError(errno, strerror[, filename[, winerror[, filename2]]])
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ci   .. index:: pair: module; errno
3227db96d56Sopenharmony_ci
3237db96d56Sopenharmony_ci   This exception is raised when a system function returns a system-related
3247db96d56Sopenharmony_ci   error, including I/O failures such as "file not found" or "disk full"
3257db96d56Sopenharmony_ci   (not for illegal argument types or other incidental errors).
3267db96d56Sopenharmony_ci
3277db96d56Sopenharmony_ci   The second form of the constructor sets the corresponding attributes,
3287db96d56Sopenharmony_ci   described below.  The attributes default to :const:`None` if not
3297db96d56Sopenharmony_ci   specified.  For backwards compatibility, if three arguments are passed,
3307db96d56Sopenharmony_ci   the :attr:`~BaseException.args` attribute contains only a 2-tuple
3317db96d56Sopenharmony_ci   of the first two constructor arguments.
3327db96d56Sopenharmony_ci
3337db96d56Sopenharmony_ci   The constructor often actually returns a subclass of :exc:`OSError`, as
3347db96d56Sopenharmony_ci   described in `OS exceptions`_ below.  The particular subclass depends on
3357db96d56Sopenharmony_ci   the final :attr:`.errno` value.  This behaviour only occurs when
3367db96d56Sopenharmony_ci   constructing :exc:`OSError` directly or via an alias, and is not
3377db96d56Sopenharmony_ci   inherited when subclassing.
3387db96d56Sopenharmony_ci
3397db96d56Sopenharmony_ci   .. attribute:: errno
3407db96d56Sopenharmony_ci
3417db96d56Sopenharmony_ci      A numeric error code from the C variable :c:data:`errno`.
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_ci   .. attribute:: winerror
3447db96d56Sopenharmony_ci
3457db96d56Sopenharmony_ci      Under Windows, this gives you the native
3467db96d56Sopenharmony_ci      Windows error code.  The :attr:`.errno` attribute is then an approximate
3477db96d56Sopenharmony_ci      translation, in POSIX terms, of that native error code.
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_ci      Under Windows, if the *winerror* constructor argument is an integer,
3507db96d56Sopenharmony_ci      the :attr:`.errno` attribute is determined from the Windows error code,
3517db96d56Sopenharmony_ci      and the *errno* argument is ignored.  On other platforms, the
3527db96d56Sopenharmony_ci      *winerror* argument is ignored, and the :attr:`winerror` attribute
3537db96d56Sopenharmony_ci      does not exist.
3547db96d56Sopenharmony_ci
3557db96d56Sopenharmony_ci   .. attribute:: strerror
3567db96d56Sopenharmony_ci
3577db96d56Sopenharmony_ci      The corresponding error message, as provided by
3587db96d56Sopenharmony_ci      the operating system.  It is formatted by the C
3597db96d56Sopenharmony_ci      functions :c:func:`perror` under POSIX, and :c:func:`FormatMessage`
3607db96d56Sopenharmony_ci      under Windows.
3617db96d56Sopenharmony_ci
3627db96d56Sopenharmony_ci   .. attribute:: filename
3637db96d56Sopenharmony_ci                  filename2
3647db96d56Sopenharmony_ci
3657db96d56Sopenharmony_ci      For exceptions that involve a file system path (such as :func:`open` or
3667db96d56Sopenharmony_ci      :func:`os.unlink`), :attr:`filename` is the file name passed to the function.
3677db96d56Sopenharmony_ci      For functions that involve two file system paths (such as
3687db96d56Sopenharmony_ci      :func:`os.rename`), :attr:`filename2` corresponds to the second
3697db96d56Sopenharmony_ci      file name passed to the function.
3707db96d56Sopenharmony_ci
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_ci   .. versionchanged:: 3.3
3737db96d56Sopenharmony_ci      :exc:`EnvironmentError`, :exc:`IOError`, :exc:`WindowsError`,
3747db96d56Sopenharmony_ci      :exc:`socket.error`, :exc:`select.error` and
3757db96d56Sopenharmony_ci      :exc:`mmap.error` have been merged into :exc:`OSError`, and the
3767db96d56Sopenharmony_ci      constructor may return a subclass.
3777db96d56Sopenharmony_ci
3787db96d56Sopenharmony_ci   .. versionchanged:: 3.4
3797db96d56Sopenharmony_ci      The :attr:`filename` attribute is now the original file name passed to
3807db96d56Sopenharmony_ci      the function, instead of the name encoded to or decoded from the
3817db96d56Sopenharmony_ci      :term:`filesystem encoding and error handler`. Also, the *filename2*
3827db96d56Sopenharmony_ci      constructor argument and attribute was added.
3837db96d56Sopenharmony_ci
3847db96d56Sopenharmony_ci
3857db96d56Sopenharmony_ci.. exception:: OverflowError
3867db96d56Sopenharmony_ci
3877db96d56Sopenharmony_ci   Raised when the result of an arithmetic operation is too large to be
3887db96d56Sopenharmony_ci   represented.  This cannot occur for integers (which would rather raise
3897db96d56Sopenharmony_ci   :exc:`MemoryError` than give up).  However, for historical reasons,
3907db96d56Sopenharmony_ci   OverflowError is sometimes raised for integers that are outside a required
3917db96d56Sopenharmony_ci   range.   Because of the lack of standardization of floating point exception
3927db96d56Sopenharmony_ci   handling in C, most floating point operations are not checked.
3937db96d56Sopenharmony_ci
3947db96d56Sopenharmony_ci
3957db96d56Sopenharmony_ci.. exception:: RecursionError
3967db96d56Sopenharmony_ci
3977db96d56Sopenharmony_ci   This exception is derived from :exc:`RuntimeError`.  It is raised when the
3987db96d56Sopenharmony_ci   interpreter detects that the maximum recursion depth (see
3997db96d56Sopenharmony_ci   :func:`sys.getrecursionlimit`) is exceeded.
4007db96d56Sopenharmony_ci
4017db96d56Sopenharmony_ci   .. versionadded:: 3.5
4027db96d56Sopenharmony_ci      Previously, a plain :exc:`RuntimeError` was raised.
4037db96d56Sopenharmony_ci
4047db96d56Sopenharmony_ci
4057db96d56Sopenharmony_ci.. exception:: ReferenceError
4067db96d56Sopenharmony_ci
4077db96d56Sopenharmony_ci   This exception is raised when a weak reference proxy, created by the
4087db96d56Sopenharmony_ci   :func:`weakref.proxy` function, is used to access an attribute of the referent
4097db96d56Sopenharmony_ci   after it has been garbage collected. For more information on weak references,
4107db96d56Sopenharmony_ci   see the :mod:`weakref` module.
4117db96d56Sopenharmony_ci
4127db96d56Sopenharmony_ci
4137db96d56Sopenharmony_ci.. exception:: RuntimeError
4147db96d56Sopenharmony_ci
4157db96d56Sopenharmony_ci   Raised when an error is detected that doesn't fall in any of the other
4167db96d56Sopenharmony_ci   categories.  The associated value is a string indicating what precisely went
4177db96d56Sopenharmony_ci   wrong.
4187db96d56Sopenharmony_ci
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ci.. exception:: StopIteration
4217db96d56Sopenharmony_ci
4227db96d56Sopenharmony_ci   Raised by built-in function :func:`next` and an :term:`iterator`\'s
4237db96d56Sopenharmony_ci   :meth:`~iterator.__next__` method to signal that there are no further
4247db96d56Sopenharmony_ci   items produced by the iterator.
4257db96d56Sopenharmony_ci
4267db96d56Sopenharmony_ci   The exception object has a single attribute :attr:`value`, which is
4277db96d56Sopenharmony_ci   given as an argument when constructing the exception, and defaults
4287db96d56Sopenharmony_ci   to :const:`None`.
4297db96d56Sopenharmony_ci
4307db96d56Sopenharmony_ci   When a :term:`generator` or :term:`coroutine` function
4317db96d56Sopenharmony_ci   returns, a new :exc:`StopIteration` instance is
4327db96d56Sopenharmony_ci   raised, and the value returned by the function is used as the
4337db96d56Sopenharmony_ci   :attr:`value` parameter to the constructor of the exception.
4347db96d56Sopenharmony_ci
4357db96d56Sopenharmony_ci   If a generator code directly or indirectly raises :exc:`StopIteration`,
4367db96d56Sopenharmony_ci   it is converted into a :exc:`RuntimeError` (retaining the
4377db96d56Sopenharmony_ci   :exc:`StopIteration` as the new exception's cause).
4387db96d56Sopenharmony_ci
4397db96d56Sopenharmony_ci   .. versionchanged:: 3.3
4407db96d56Sopenharmony_ci      Added ``value`` attribute and the ability for generator functions to
4417db96d56Sopenharmony_ci      use it to return a value.
4427db96d56Sopenharmony_ci
4437db96d56Sopenharmony_ci   .. versionchanged:: 3.5
4447db96d56Sopenharmony_ci      Introduced the RuntimeError transformation via
4457db96d56Sopenharmony_ci      ``from __future__ import generator_stop``, see :pep:`479`.
4467db96d56Sopenharmony_ci
4477db96d56Sopenharmony_ci   .. versionchanged:: 3.7
4487db96d56Sopenharmony_ci      Enable :pep:`479` for all code by default: a :exc:`StopIteration`
4497db96d56Sopenharmony_ci      error raised in a generator is transformed into a :exc:`RuntimeError`.
4507db96d56Sopenharmony_ci
4517db96d56Sopenharmony_ci.. exception:: StopAsyncIteration
4527db96d56Sopenharmony_ci
4537db96d56Sopenharmony_ci   Must be raised by :meth:`__anext__` method of an
4547db96d56Sopenharmony_ci   :term:`asynchronous iterator` object to stop the iteration.
4557db96d56Sopenharmony_ci
4567db96d56Sopenharmony_ci   .. versionadded:: 3.5
4577db96d56Sopenharmony_ci
4587db96d56Sopenharmony_ci.. exception:: SyntaxError(message, details)
4597db96d56Sopenharmony_ci
4607db96d56Sopenharmony_ci   Raised when the parser encounters a syntax error.  This may occur in an
4617db96d56Sopenharmony_ci   :keyword:`import` statement, in a call to the built-in functions
4627db96d56Sopenharmony_ci   :func:`compile`, :func:`exec`,
4637db96d56Sopenharmony_ci   or :func:`eval`, or when reading the initial script or standard input
4647db96d56Sopenharmony_ci   (also interactively).
4657db96d56Sopenharmony_ci
4667db96d56Sopenharmony_ci   The :func:`str` of the exception instance returns only the error message.
4677db96d56Sopenharmony_ci   Details is a tuple whose members are also available as separate attributes.
4687db96d56Sopenharmony_ci
4697db96d56Sopenharmony_ci   .. attribute:: filename
4707db96d56Sopenharmony_ci
4717db96d56Sopenharmony_ci      The name of the file the syntax error occurred in.
4727db96d56Sopenharmony_ci
4737db96d56Sopenharmony_ci   .. attribute:: lineno
4747db96d56Sopenharmony_ci
4757db96d56Sopenharmony_ci      Which line number in the file the error occurred in. This is
4767db96d56Sopenharmony_ci      1-indexed: the first line in the file has a ``lineno`` of 1.
4777db96d56Sopenharmony_ci
4787db96d56Sopenharmony_ci   .. attribute:: offset
4797db96d56Sopenharmony_ci
4807db96d56Sopenharmony_ci      The column in the line where the error occurred. This is
4817db96d56Sopenharmony_ci      1-indexed: the first character in the line has an ``offset`` of 1.
4827db96d56Sopenharmony_ci
4837db96d56Sopenharmony_ci   .. attribute:: text
4847db96d56Sopenharmony_ci
4857db96d56Sopenharmony_ci      The source code text involved in the error.
4867db96d56Sopenharmony_ci
4877db96d56Sopenharmony_ci   .. attribute:: end_lineno
4887db96d56Sopenharmony_ci
4897db96d56Sopenharmony_ci      Which line number in the file the error occurred ends in. This is
4907db96d56Sopenharmony_ci      1-indexed: the first line in the file has a ``lineno`` of 1.
4917db96d56Sopenharmony_ci
4927db96d56Sopenharmony_ci   .. attribute:: end_offset
4937db96d56Sopenharmony_ci
4947db96d56Sopenharmony_ci      The column in the end line where the error occurred finishes. This is
4957db96d56Sopenharmony_ci      1-indexed: the first character in the line has an ``offset`` of 1.
4967db96d56Sopenharmony_ci
4977db96d56Sopenharmony_ci   For errors in f-string fields, the message is prefixed by "f-string: "
4987db96d56Sopenharmony_ci   and the offsets are offsets in a text constructed from the replacement
4997db96d56Sopenharmony_ci   expression.  For example, compiling f'Bad {a b} field' results in this
5007db96d56Sopenharmony_ci   args attribute: ('f-string: ...', ('', 1, 2, '(a b)\n', 1, 5)).
5017db96d56Sopenharmony_ci
5027db96d56Sopenharmony_ci   .. versionchanged:: 3.10
5037db96d56Sopenharmony_ci      Added the :attr:`end_lineno` and :attr:`end_offset` attributes.
5047db96d56Sopenharmony_ci
5057db96d56Sopenharmony_ci.. exception:: IndentationError
5067db96d56Sopenharmony_ci
5077db96d56Sopenharmony_ci   Base class for syntax errors related to incorrect indentation.  This is a
5087db96d56Sopenharmony_ci   subclass of :exc:`SyntaxError`.
5097db96d56Sopenharmony_ci
5107db96d56Sopenharmony_ci
5117db96d56Sopenharmony_ci.. exception:: TabError
5127db96d56Sopenharmony_ci
5137db96d56Sopenharmony_ci   Raised when indentation contains an inconsistent use of tabs and spaces.
5147db96d56Sopenharmony_ci   This is a subclass of :exc:`IndentationError`.
5157db96d56Sopenharmony_ci
5167db96d56Sopenharmony_ci
5177db96d56Sopenharmony_ci.. exception:: SystemError
5187db96d56Sopenharmony_ci
5197db96d56Sopenharmony_ci   Raised when the interpreter finds an internal error, but the situation does not
5207db96d56Sopenharmony_ci   look so serious to cause it to abandon all hope. The associated value is a
5217db96d56Sopenharmony_ci   string indicating what went wrong (in low-level terms).
5227db96d56Sopenharmony_ci
5237db96d56Sopenharmony_ci   You should report this to the author or maintainer of your Python interpreter.
5247db96d56Sopenharmony_ci   Be sure to report the version of the Python interpreter (``sys.version``; it is
5257db96d56Sopenharmony_ci   also printed at the start of an interactive Python session), the exact error
5267db96d56Sopenharmony_ci   message (the exception's associated value) and if possible the source of the
5277db96d56Sopenharmony_ci   program that triggered the error.
5287db96d56Sopenharmony_ci
5297db96d56Sopenharmony_ci
5307db96d56Sopenharmony_ci.. exception:: SystemExit
5317db96d56Sopenharmony_ci
5327db96d56Sopenharmony_ci   This exception is raised by the :func:`sys.exit` function.  It inherits from
5337db96d56Sopenharmony_ci   :exc:`BaseException` instead of :exc:`Exception` so that it is not accidentally
5347db96d56Sopenharmony_ci   caught by code that catches :exc:`Exception`.  This allows the exception to
5357db96d56Sopenharmony_ci   properly propagate up and cause the interpreter to exit.  When it is not
5367db96d56Sopenharmony_ci   handled, the Python interpreter exits; no stack traceback is printed.  The
5377db96d56Sopenharmony_ci   constructor accepts the same optional argument passed to :func:`sys.exit`.
5387db96d56Sopenharmony_ci   If the value is an integer, it specifies the system exit status (passed to
5397db96d56Sopenharmony_ci   C's :c:func:`exit` function); if it is ``None``, the exit status is zero; if
5407db96d56Sopenharmony_ci   it has another type (such as a string), the object's value is printed and
5417db96d56Sopenharmony_ci   the exit status is one.
5427db96d56Sopenharmony_ci
5437db96d56Sopenharmony_ci   A call to :func:`sys.exit` is translated into an exception so that clean-up
5447db96d56Sopenharmony_ci   handlers (:keyword:`finally` clauses of :keyword:`try` statements) can be
5457db96d56Sopenharmony_ci   executed, and so that a debugger can execute a script without running the risk
5467db96d56Sopenharmony_ci   of losing control.  The :func:`os._exit` function can be used if it is
5477db96d56Sopenharmony_ci   absolutely positively necessary to exit immediately (for example, in the child
5487db96d56Sopenharmony_ci   process after a call to :func:`os.fork`).
5497db96d56Sopenharmony_ci
5507db96d56Sopenharmony_ci   .. attribute:: code
5517db96d56Sopenharmony_ci
5527db96d56Sopenharmony_ci      The exit status or error message that is passed to the constructor.
5537db96d56Sopenharmony_ci      (Defaults to ``None``.)
5547db96d56Sopenharmony_ci
5557db96d56Sopenharmony_ci
5567db96d56Sopenharmony_ci.. exception:: TypeError
5577db96d56Sopenharmony_ci
5587db96d56Sopenharmony_ci   Raised when an operation or function is applied to an object of inappropriate
5597db96d56Sopenharmony_ci   type.  The associated value is a string giving details about the type mismatch.
5607db96d56Sopenharmony_ci
5617db96d56Sopenharmony_ci   This exception may be raised by user code to indicate that an attempted
5627db96d56Sopenharmony_ci   operation on an object is not supported, and is not meant to be. If an object
5637db96d56Sopenharmony_ci   is meant to support a given operation but has not yet provided an
5647db96d56Sopenharmony_ci   implementation, :exc:`NotImplementedError` is the proper exception to raise.
5657db96d56Sopenharmony_ci
5667db96d56Sopenharmony_ci   Passing arguments of the wrong type (e.g. passing a :class:`list` when an
5677db96d56Sopenharmony_ci   :class:`int` is expected) should result in a :exc:`TypeError`, but passing
5687db96d56Sopenharmony_ci   arguments with the wrong value (e.g. a number outside expected boundaries)
5697db96d56Sopenharmony_ci   should result in a :exc:`ValueError`.
5707db96d56Sopenharmony_ci
5717db96d56Sopenharmony_ci.. exception:: UnboundLocalError
5727db96d56Sopenharmony_ci
5737db96d56Sopenharmony_ci   Raised when a reference is made to a local variable in a function or method, but
5747db96d56Sopenharmony_ci   no value has been bound to that variable.  This is a subclass of
5757db96d56Sopenharmony_ci   :exc:`NameError`.
5767db96d56Sopenharmony_ci
5777db96d56Sopenharmony_ci
5787db96d56Sopenharmony_ci.. exception:: UnicodeError
5797db96d56Sopenharmony_ci
5807db96d56Sopenharmony_ci   Raised when a Unicode-related encoding or decoding error occurs.  It is a
5817db96d56Sopenharmony_ci   subclass of :exc:`ValueError`.
5827db96d56Sopenharmony_ci
5837db96d56Sopenharmony_ci   :exc:`UnicodeError` has attributes that describe the encoding or decoding
5847db96d56Sopenharmony_ci   error.  For example, ``err.object[err.start:err.end]`` gives the particular
5857db96d56Sopenharmony_ci   invalid input that the codec failed on.
5867db96d56Sopenharmony_ci
5877db96d56Sopenharmony_ci   .. attribute:: encoding
5887db96d56Sopenharmony_ci
5897db96d56Sopenharmony_ci       The name of the encoding that raised the error.
5907db96d56Sopenharmony_ci
5917db96d56Sopenharmony_ci   .. attribute:: reason
5927db96d56Sopenharmony_ci
5937db96d56Sopenharmony_ci       A string describing the specific codec error.
5947db96d56Sopenharmony_ci
5957db96d56Sopenharmony_ci   .. attribute:: object
5967db96d56Sopenharmony_ci
5977db96d56Sopenharmony_ci       The object the codec was attempting to encode or decode.
5987db96d56Sopenharmony_ci
5997db96d56Sopenharmony_ci   .. attribute:: start
6007db96d56Sopenharmony_ci
6017db96d56Sopenharmony_ci       The first index of invalid data in :attr:`object`.
6027db96d56Sopenharmony_ci
6037db96d56Sopenharmony_ci   .. attribute:: end
6047db96d56Sopenharmony_ci
6057db96d56Sopenharmony_ci       The index after the last invalid data in :attr:`object`.
6067db96d56Sopenharmony_ci
6077db96d56Sopenharmony_ci
6087db96d56Sopenharmony_ci.. exception:: UnicodeEncodeError
6097db96d56Sopenharmony_ci
6107db96d56Sopenharmony_ci   Raised when a Unicode-related error occurs during encoding.  It is a subclass of
6117db96d56Sopenharmony_ci   :exc:`UnicodeError`.
6127db96d56Sopenharmony_ci
6137db96d56Sopenharmony_ci
6147db96d56Sopenharmony_ci.. exception:: UnicodeDecodeError
6157db96d56Sopenharmony_ci
6167db96d56Sopenharmony_ci   Raised when a Unicode-related error occurs during decoding.  It is a subclass of
6177db96d56Sopenharmony_ci   :exc:`UnicodeError`.
6187db96d56Sopenharmony_ci
6197db96d56Sopenharmony_ci
6207db96d56Sopenharmony_ci.. exception:: UnicodeTranslateError
6217db96d56Sopenharmony_ci
6227db96d56Sopenharmony_ci   Raised when a Unicode-related error occurs during translating.  It is a subclass
6237db96d56Sopenharmony_ci   of :exc:`UnicodeError`.
6247db96d56Sopenharmony_ci
6257db96d56Sopenharmony_ci
6267db96d56Sopenharmony_ci.. exception:: ValueError
6277db96d56Sopenharmony_ci
6287db96d56Sopenharmony_ci   Raised when an operation or function receives an argument that has the
6297db96d56Sopenharmony_ci   right type but an inappropriate value, and the situation is not described by a
6307db96d56Sopenharmony_ci   more precise exception such as :exc:`IndexError`.
6317db96d56Sopenharmony_ci
6327db96d56Sopenharmony_ci
6337db96d56Sopenharmony_ci.. exception:: ZeroDivisionError
6347db96d56Sopenharmony_ci
6357db96d56Sopenharmony_ci   Raised when the second argument of a division or modulo operation is zero.  The
6367db96d56Sopenharmony_ci   associated value is a string indicating the type of the operands and the
6377db96d56Sopenharmony_ci   operation.
6387db96d56Sopenharmony_ci
6397db96d56Sopenharmony_ci
6407db96d56Sopenharmony_ciThe following exceptions are kept for compatibility with previous versions;
6417db96d56Sopenharmony_cistarting from Python 3.3, they are aliases of :exc:`OSError`.
6427db96d56Sopenharmony_ci
6437db96d56Sopenharmony_ci.. exception:: EnvironmentError
6447db96d56Sopenharmony_ci
6457db96d56Sopenharmony_ci.. exception:: IOError
6467db96d56Sopenharmony_ci
6477db96d56Sopenharmony_ci.. exception:: WindowsError
6487db96d56Sopenharmony_ci
6497db96d56Sopenharmony_ci   Only available on Windows.
6507db96d56Sopenharmony_ci
6517db96d56Sopenharmony_ci
6527db96d56Sopenharmony_ciOS exceptions
6537db96d56Sopenharmony_ci^^^^^^^^^^^^^
6547db96d56Sopenharmony_ci
6557db96d56Sopenharmony_ciThe following exceptions are subclasses of :exc:`OSError`, they get raised
6567db96d56Sopenharmony_cidepending on the system error code.
6577db96d56Sopenharmony_ci
6587db96d56Sopenharmony_ci.. exception:: BlockingIOError
6597db96d56Sopenharmony_ci
6607db96d56Sopenharmony_ci   Raised when an operation would block on an object (e.g. socket) set
6617db96d56Sopenharmony_ci   for non-blocking operation.
6627db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.EAGAIN`, :py:data:`~errno.EALREADY`,
6637db96d56Sopenharmony_ci   :py:data:`~errno.EWOULDBLOCK` and :py:data:`~errno.EINPROGRESS`.
6647db96d56Sopenharmony_ci
6657db96d56Sopenharmony_ci   In addition to those of :exc:`OSError`, :exc:`BlockingIOError` can have
6667db96d56Sopenharmony_ci   one more attribute:
6677db96d56Sopenharmony_ci
6687db96d56Sopenharmony_ci   .. attribute:: characters_written
6697db96d56Sopenharmony_ci
6707db96d56Sopenharmony_ci      An integer containing the number of characters written to the stream
6717db96d56Sopenharmony_ci      before it blocked.  This attribute is available when using the
6727db96d56Sopenharmony_ci      buffered I/O classes from the :mod:`io` module.
6737db96d56Sopenharmony_ci
6747db96d56Sopenharmony_ci.. exception:: ChildProcessError
6757db96d56Sopenharmony_ci
6767db96d56Sopenharmony_ci   Raised when an operation on a child process failed.
6777db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.ECHILD`.
6787db96d56Sopenharmony_ci
6797db96d56Sopenharmony_ci.. exception:: ConnectionError
6807db96d56Sopenharmony_ci
6817db96d56Sopenharmony_ci   A base class for connection-related issues.
6827db96d56Sopenharmony_ci
6837db96d56Sopenharmony_ci   Subclasses are :exc:`BrokenPipeError`, :exc:`ConnectionAbortedError`,
6847db96d56Sopenharmony_ci   :exc:`ConnectionRefusedError` and :exc:`ConnectionResetError`.
6857db96d56Sopenharmony_ci
6867db96d56Sopenharmony_ci.. exception:: BrokenPipeError
6877db96d56Sopenharmony_ci
6887db96d56Sopenharmony_ci   A subclass of :exc:`ConnectionError`, raised when trying to write on a
6897db96d56Sopenharmony_ci   pipe while the other end has been closed, or trying to write on a socket
6907db96d56Sopenharmony_ci   which has been shutdown for writing.
6917db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.EPIPE` and :py:data:`~errno.ESHUTDOWN`.
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ci.. exception:: ConnectionAbortedError
6947db96d56Sopenharmony_ci
6957db96d56Sopenharmony_ci   A subclass of :exc:`ConnectionError`, raised when a connection attempt
6967db96d56Sopenharmony_ci   is aborted by the peer.
6977db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.ECONNABORTED`.
6987db96d56Sopenharmony_ci
6997db96d56Sopenharmony_ci.. exception:: ConnectionRefusedError
7007db96d56Sopenharmony_ci
7017db96d56Sopenharmony_ci   A subclass of :exc:`ConnectionError`, raised when a connection attempt
7027db96d56Sopenharmony_ci   is refused by the peer.
7037db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.ECONNREFUSED`.
7047db96d56Sopenharmony_ci
7057db96d56Sopenharmony_ci.. exception:: ConnectionResetError
7067db96d56Sopenharmony_ci
7077db96d56Sopenharmony_ci   A subclass of :exc:`ConnectionError`, raised when a connection is
7087db96d56Sopenharmony_ci   reset by the peer.
7097db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.ECONNRESET`.
7107db96d56Sopenharmony_ci
7117db96d56Sopenharmony_ci.. exception:: FileExistsError
7127db96d56Sopenharmony_ci
7137db96d56Sopenharmony_ci   Raised when trying to create a file or directory which already exists.
7147db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.EEXIST`.
7157db96d56Sopenharmony_ci
7167db96d56Sopenharmony_ci.. exception:: FileNotFoundError
7177db96d56Sopenharmony_ci
7187db96d56Sopenharmony_ci   Raised when a file or directory is requested but doesn't exist.
7197db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.ENOENT`.
7207db96d56Sopenharmony_ci
7217db96d56Sopenharmony_ci.. exception:: InterruptedError
7227db96d56Sopenharmony_ci
7237db96d56Sopenharmony_ci   Raised when a system call is interrupted by an incoming signal.
7247db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.EINTR`.
7257db96d56Sopenharmony_ci
7267db96d56Sopenharmony_ci   .. versionchanged:: 3.5
7277db96d56Sopenharmony_ci      Python now retries system calls when a syscall is interrupted by a
7287db96d56Sopenharmony_ci      signal, except if the signal handler raises an exception (see :pep:`475`
7297db96d56Sopenharmony_ci      for the rationale), instead of raising :exc:`InterruptedError`.
7307db96d56Sopenharmony_ci
7317db96d56Sopenharmony_ci.. exception:: IsADirectoryError
7327db96d56Sopenharmony_ci
7337db96d56Sopenharmony_ci   Raised when a file operation (such as :func:`os.remove`) is requested
7347db96d56Sopenharmony_ci   on a directory.
7357db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.EISDIR`.
7367db96d56Sopenharmony_ci
7377db96d56Sopenharmony_ci.. exception:: NotADirectoryError
7387db96d56Sopenharmony_ci
7397db96d56Sopenharmony_ci   Raised when a directory operation (such as :func:`os.listdir`) is requested on
7407db96d56Sopenharmony_ci   something which is not a directory.  On most POSIX platforms, it may also be
7417db96d56Sopenharmony_ci   raised if an operation attempts to open or traverse a non-directory file as if
7427db96d56Sopenharmony_ci   it were a directory.
7437db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.ENOTDIR`.
7447db96d56Sopenharmony_ci
7457db96d56Sopenharmony_ci.. exception:: PermissionError
7467db96d56Sopenharmony_ci
7477db96d56Sopenharmony_ci   Raised when trying to run an operation without the adequate access
7487db96d56Sopenharmony_ci   rights - for example filesystem permissions.
7497db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.EACCES`,
7507db96d56Sopenharmony_ci   :py:data:`~errno.EPERM`, and :py:data:`~errno.ENOTCAPABLE`.
7517db96d56Sopenharmony_ci
7527db96d56Sopenharmony_ci   .. versionchanged:: 3.11.1
7537db96d56Sopenharmony_ci      WASI's :py:data:`~errno.ENOTCAPABLE` is now mapped to
7547db96d56Sopenharmony_ci      :exc:`PermissionError`.
7557db96d56Sopenharmony_ci
7567db96d56Sopenharmony_ci.. exception:: ProcessLookupError
7577db96d56Sopenharmony_ci
7587db96d56Sopenharmony_ci   Raised when a given process doesn't exist.
7597db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.ESRCH`.
7607db96d56Sopenharmony_ci
7617db96d56Sopenharmony_ci.. exception:: TimeoutError
7627db96d56Sopenharmony_ci
7637db96d56Sopenharmony_ci   Raised when a system function timed out at the system level.
7647db96d56Sopenharmony_ci   Corresponds to :c:data:`errno` :py:data:`~errno.ETIMEDOUT`.
7657db96d56Sopenharmony_ci
7667db96d56Sopenharmony_ci.. versionadded:: 3.3
7677db96d56Sopenharmony_ci   All the above :exc:`OSError` subclasses were added.
7687db96d56Sopenharmony_ci
7697db96d56Sopenharmony_ci
7707db96d56Sopenharmony_ci.. seealso::
7717db96d56Sopenharmony_ci
7727db96d56Sopenharmony_ci   :pep:`3151` - Reworking the OS and IO exception hierarchy
7737db96d56Sopenharmony_ci
7747db96d56Sopenharmony_ci
7757db96d56Sopenharmony_ci.. _warning-categories-as-exceptions:
7767db96d56Sopenharmony_ci
7777db96d56Sopenharmony_ciWarnings
7787db96d56Sopenharmony_ci--------
7797db96d56Sopenharmony_ci
7807db96d56Sopenharmony_ciThe following exceptions are used as warning categories; see the
7817db96d56Sopenharmony_ci:ref:`warning-categories` documentation for more details.
7827db96d56Sopenharmony_ci
7837db96d56Sopenharmony_ci.. exception:: Warning
7847db96d56Sopenharmony_ci
7857db96d56Sopenharmony_ci   Base class for warning categories.
7867db96d56Sopenharmony_ci
7877db96d56Sopenharmony_ci
7887db96d56Sopenharmony_ci.. exception:: UserWarning
7897db96d56Sopenharmony_ci
7907db96d56Sopenharmony_ci   Base class for warnings generated by user code.
7917db96d56Sopenharmony_ci
7927db96d56Sopenharmony_ci
7937db96d56Sopenharmony_ci.. exception:: DeprecationWarning
7947db96d56Sopenharmony_ci
7957db96d56Sopenharmony_ci   Base class for warnings about deprecated features when those warnings are
7967db96d56Sopenharmony_ci   intended for other Python developers.
7977db96d56Sopenharmony_ci
7987db96d56Sopenharmony_ci   Ignored by the default warning filters, except in the ``__main__`` module
7997db96d56Sopenharmony_ci   (:pep:`565`). Enabling the :ref:`Python Development Mode <devmode>` shows
8007db96d56Sopenharmony_ci   this warning.
8017db96d56Sopenharmony_ci
8027db96d56Sopenharmony_ci   The deprecation policy is described in :pep:`387`.
8037db96d56Sopenharmony_ci
8047db96d56Sopenharmony_ci
8057db96d56Sopenharmony_ci.. exception:: PendingDeprecationWarning
8067db96d56Sopenharmony_ci
8077db96d56Sopenharmony_ci   Base class for warnings about features which are obsolete and
8087db96d56Sopenharmony_ci   expected to be deprecated in the future, but are not deprecated
8097db96d56Sopenharmony_ci   at the moment.
8107db96d56Sopenharmony_ci
8117db96d56Sopenharmony_ci   This class is rarely used as emitting a warning about a possible
8127db96d56Sopenharmony_ci   upcoming deprecation is unusual, and :exc:`DeprecationWarning`
8137db96d56Sopenharmony_ci   is preferred for already active deprecations.
8147db96d56Sopenharmony_ci
8157db96d56Sopenharmony_ci   Ignored by the default warning filters. Enabling the :ref:`Python
8167db96d56Sopenharmony_ci   Development Mode <devmode>` shows this warning.
8177db96d56Sopenharmony_ci
8187db96d56Sopenharmony_ci   The deprecation policy is described in :pep:`387`.
8197db96d56Sopenharmony_ci
8207db96d56Sopenharmony_ci
8217db96d56Sopenharmony_ci.. exception:: SyntaxWarning
8227db96d56Sopenharmony_ci
8237db96d56Sopenharmony_ci   Base class for warnings about dubious syntax.
8247db96d56Sopenharmony_ci
8257db96d56Sopenharmony_ci
8267db96d56Sopenharmony_ci.. exception:: RuntimeWarning
8277db96d56Sopenharmony_ci
8287db96d56Sopenharmony_ci   Base class for warnings about dubious runtime behavior.
8297db96d56Sopenharmony_ci
8307db96d56Sopenharmony_ci
8317db96d56Sopenharmony_ci.. exception:: FutureWarning
8327db96d56Sopenharmony_ci
8337db96d56Sopenharmony_ci   Base class for warnings about deprecated features when those warnings are
8347db96d56Sopenharmony_ci   intended for end users of applications that are written in Python.
8357db96d56Sopenharmony_ci
8367db96d56Sopenharmony_ci
8377db96d56Sopenharmony_ci.. exception:: ImportWarning
8387db96d56Sopenharmony_ci
8397db96d56Sopenharmony_ci   Base class for warnings about probable mistakes in module imports.
8407db96d56Sopenharmony_ci
8417db96d56Sopenharmony_ci   Ignored by the default warning filters. Enabling the :ref:`Python
8427db96d56Sopenharmony_ci   Development Mode <devmode>` shows this warning.
8437db96d56Sopenharmony_ci
8447db96d56Sopenharmony_ci
8457db96d56Sopenharmony_ci.. exception:: UnicodeWarning
8467db96d56Sopenharmony_ci
8477db96d56Sopenharmony_ci   Base class for warnings related to Unicode.
8487db96d56Sopenharmony_ci
8497db96d56Sopenharmony_ci
8507db96d56Sopenharmony_ci.. exception:: EncodingWarning
8517db96d56Sopenharmony_ci
8527db96d56Sopenharmony_ci   Base class for warnings related to encodings.
8537db96d56Sopenharmony_ci
8547db96d56Sopenharmony_ci   See :ref:`io-encoding-warning` for details.
8557db96d56Sopenharmony_ci
8567db96d56Sopenharmony_ci   .. versionadded:: 3.10
8577db96d56Sopenharmony_ci
8587db96d56Sopenharmony_ci
8597db96d56Sopenharmony_ci.. exception:: BytesWarning
8607db96d56Sopenharmony_ci
8617db96d56Sopenharmony_ci   Base class for warnings related to :class:`bytes` and :class:`bytearray`.
8627db96d56Sopenharmony_ci
8637db96d56Sopenharmony_ci
8647db96d56Sopenharmony_ci.. exception:: ResourceWarning
8657db96d56Sopenharmony_ci
8667db96d56Sopenharmony_ci   Base class for warnings related to resource usage.
8677db96d56Sopenharmony_ci
8687db96d56Sopenharmony_ci   Ignored by the default warning filters. Enabling the :ref:`Python
8697db96d56Sopenharmony_ci   Development Mode <devmode>` shows this warning.
8707db96d56Sopenharmony_ci
8717db96d56Sopenharmony_ci   .. versionadded:: 3.2
8727db96d56Sopenharmony_ci
8737db96d56Sopenharmony_ci
8747db96d56Sopenharmony_ciException groups
8757db96d56Sopenharmony_ci----------------
8767db96d56Sopenharmony_ci
8777db96d56Sopenharmony_ciThe following are used when it is necessary to raise multiple unrelated
8787db96d56Sopenharmony_ciexceptions. They are part of the exception hierarchy so they can be
8797db96d56Sopenharmony_cihandled with :keyword:`except` like all other exceptions. In addition,
8807db96d56Sopenharmony_cithey are recognised by :keyword:`except*<except_star>`, which matches
8817db96d56Sopenharmony_citheir subgroups based on the types of the contained exceptions.
8827db96d56Sopenharmony_ci
8837db96d56Sopenharmony_ci.. exception:: ExceptionGroup(msg, excs)
8847db96d56Sopenharmony_ci.. exception:: BaseExceptionGroup(msg, excs)
8857db96d56Sopenharmony_ci
8867db96d56Sopenharmony_ci   Both of these exception types wrap the exceptions in the sequence ``excs``.
8877db96d56Sopenharmony_ci   The ``msg`` parameter must be a string. The difference between the two
8887db96d56Sopenharmony_ci   classes is that :exc:`BaseExceptionGroup` extends :exc:`BaseException` and
8897db96d56Sopenharmony_ci   it can wrap any exception, while :exc:`ExceptionGroup` extends :exc:`Exception`
8907db96d56Sopenharmony_ci   and it can only wrap subclasses of :exc:`Exception`. This design is so that
8917db96d56Sopenharmony_ci   ``except Exception`` catches an :exc:`ExceptionGroup` but not
8927db96d56Sopenharmony_ci   :exc:`BaseExceptionGroup`.
8937db96d56Sopenharmony_ci
8947db96d56Sopenharmony_ci   The :exc:`BaseExceptionGroup` constructor returns an :exc:`ExceptionGroup`
8957db96d56Sopenharmony_ci   rather than a :exc:`BaseExceptionGroup` if all contained exceptions are
8967db96d56Sopenharmony_ci   :exc:`Exception` instances, so it can be used to make the selection
8977db96d56Sopenharmony_ci   automatic. The :exc:`ExceptionGroup` constructor, on the other hand,
8987db96d56Sopenharmony_ci   raises a :exc:`TypeError` if any contained exception is not an
8997db96d56Sopenharmony_ci   :exc:`Exception` subclass.
9007db96d56Sopenharmony_ci
9017db96d56Sopenharmony_ci   .. attribute:: message
9027db96d56Sopenharmony_ci
9037db96d56Sopenharmony_ci       The ``msg`` argument to the constructor. This is a read-only attribute.
9047db96d56Sopenharmony_ci
9057db96d56Sopenharmony_ci   .. attribute:: exceptions
9067db96d56Sopenharmony_ci
9077db96d56Sopenharmony_ci       A tuple of the exceptions in the ``excs`` sequence given to the
9087db96d56Sopenharmony_ci       constructor. This is a read-only attribute.
9097db96d56Sopenharmony_ci
9107db96d56Sopenharmony_ci   .. method:: subgroup(condition)
9117db96d56Sopenharmony_ci
9127db96d56Sopenharmony_ci      Returns an exception group that contains only the exceptions from the
9137db96d56Sopenharmony_ci      current group that match *condition*, or ``None`` if the result is empty.
9147db96d56Sopenharmony_ci
9157db96d56Sopenharmony_ci      The condition can be either a function that accepts an exception and returns
9167db96d56Sopenharmony_ci      true for those that should be in the subgroup, or it can be an exception type
9177db96d56Sopenharmony_ci      or a tuple of exception types, which is used to check for a match using the
9187db96d56Sopenharmony_ci      same check that is used in an ``except`` clause.
9197db96d56Sopenharmony_ci
9207db96d56Sopenharmony_ci      The nesting structure of the current exception is preserved in the result,
9217db96d56Sopenharmony_ci      as are the values of its :attr:`message`, :attr:`__traceback__`,
9227db96d56Sopenharmony_ci      :attr:`__cause__`, :attr:`__context__` and :attr:`__notes__` fields.
9237db96d56Sopenharmony_ci      Empty nested groups are omitted from the result.
9247db96d56Sopenharmony_ci
9257db96d56Sopenharmony_ci      The condition is checked for all exceptions in the nested exception group,
9267db96d56Sopenharmony_ci      including the top-level and any nested exception groups. If the condition is
9277db96d56Sopenharmony_ci      true for such an exception group, it is included in the result in full.
9287db96d56Sopenharmony_ci
9297db96d56Sopenharmony_ci   .. method:: split(condition)
9307db96d56Sopenharmony_ci
9317db96d56Sopenharmony_ci      Like :meth:`subgroup`, but returns the pair ``(match, rest)`` where ``match``
9327db96d56Sopenharmony_ci      is ``subgroup(condition)`` and ``rest`` is the remaining non-matching
9337db96d56Sopenharmony_ci      part.
9347db96d56Sopenharmony_ci
9357db96d56Sopenharmony_ci   .. method:: derive(excs)
9367db96d56Sopenharmony_ci
9377db96d56Sopenharmony_ci      Returns an exception group with the same :attr:`message`, but which
9387db96d56Sopenharmony_ci      wraps the exceptions in ``excs``.
9397db96d56Sopenharmony_ci
9407db96d56Sopenharmony_ci      This method is used by :meth:`subgroup` and :meth:`split`. A
9417db96d56Sopenharmony_ci      subclass needs to override it in order to make :meth:`subgroup`
9427db96d56Sopenharmony_ci      and :meth:`split` return instances of the subclass rather
9437db96d56Sopenharmony_ci      than :exc:`ExceptionGroup`.
9447db96d56Sopenharmony_ci
9457db96d56Sopenharmony_ci      :meth:`subgroup` and :meth:`split` copy the :attr:`__traceback__`,
9467db96d56Sopenharmony_ci      :attr:`__cause__`, :attr:`__context__` and :attr:`__notes__` fields from
9477db96d56Sopenharmony_ci      the original exception group to the one returned by :meth:`derive`, so
9487db96d56Sopenharmony_ci      these fields do not need to be updated by :meth:`derive`. ::
9497db96d56Sopenharmony_ci
9507db96d56Sopenharmony_ci         >>> class MyGroup(ExceptionGroup):
9517db96d56Sopenharmony_ci         ...     def derive(self, excs):
9527db96d56Sopenharmony_ci         ...         return MyGroup(self.message, excs)
9537db96d56Sopenharmony_ci         ...
9547db96d56Sopenharmony_ci         >>> e = MyGroup("eg", [ValueError(1), TypeError(2)])
9557db96d56Sopenharmony_ci         >>> e.add_note("a note")
9567db96d56Sopenharmony_ci         >>> e.__context__ = Exception("context")
9577db96d56Sopenharmony_ci         >>> e.__cause__ = Exception("cause")
9587db96d56Sopenharmony_ci         >>> try:
9597db96d56Sopenharmony_ci         ...    raise e
9607db96d56Sopenharmony_ci         ... except Exception as e:
9617db96d56Sopenharmony_ci         ...    exc = e
9627db96d56Sopenharmony_ci         ...
9637db96d56Sopenharmony_ci         >>> match, rest = exc.split(ValueError)
9647db96d56Sopenharmony_ci         >>> exc, exc.__context__, exc.__cause__, exc.__notes__
9657db96d56Sopenharmony_ci         (MyGroup('eg', [ValueError(1), TypeError(2)]), Exception('context'), Exception('cause'), ['a note'])
9667db96d56Sopenharmony_ci         >>> match, match.__context__, match.__cause__, match.__notes__
9677db96d56Sopenharmony_ci         (MyGroup('eg', [ValueError(1)]), Exception('context'), Exception('cause'), ['a note'])
9687db96d56Sopenharmony_ci         >>> rest, rest.__context__, rest.__cause__, rest.__notes__
9697db96d56Sopenharmony_ci         (MyGroup('eg', [TypeError(2)]), Exception('context'), Exception('cause'), ['a note'])
9707db96d56Sopenharmony_ci         >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__
9717db96d56Sopenharmony_ci         True
9727db96d56Sopenharmony_ci
9737db96d56Sopenharmony_ci
9747db96d56Sopenharmony_ci   Note that :exc:`BaseExceptionGroup` defines :meth:`__new__`, so
9757db96d56Sopenharmony_ci   subclasses that need a different constructor signature need to
9767db96d56Sopenharmony_ci   override that rather than :meth:`__init__`. For example, the following
9777db96d56Sopenharmony_ci   defines an exception group subclass which accepts an exit_code and
9787db96d56Sopenharmony_ci   and constructs the group's message from it. ::
9797db96d56Sopenharmony_ci
9807db96d56Sopenharmony_ci      class Errors(ExceptionGroup):
9817db96d56Sopenharmony_ci         def __new__(cls, errors, exit_code):
9827db96d56Sopenharmony_ci            self = super().__new__(Errors, f"exit code: {exit_code}", errors)
9837db96d56Sopenharmony_ci            self.exit_code = exit_code
9847db96d56Sopenharmony_ci            return self
9857db96d56Sopenharmony_ci
9867db96d56Sopenharmony_ci         def derive(self, excs):
9877db96d56Sopenharmony_ci            return Errors(excs, self.exit_code)
9887db96d56Sopenharmony_ci
9897db96d56Sopenharmony_ci   Like :exc:`ExceptionGroup`, any subclass of :exc:`BaseExceptionGroup` which
9907db96d56Sopenharmony_ci   is also a subclass of :exc:`Exception` can only wrap instances of
9917db96d56Sopenharmony_ci   :exc:`Exception`.
9927db96d56Sopenharmony_ci
9937db96d56Sopenharmony_ci   .. versionadded:: 3.11
9947db96d56Sopenharmony_ci
9957db96d56Sopenharmony_ci
9967db96d56Sopenharmony_ciException hierarchy
9977db96d56Sopenharmony_ci-------------------
9987db96d56Sopenharmony_ci
9997db96d56Sopenharmony_ciThe class hierarchy for built-in exceptions is:
10007db96d56Sopenharmony_ci
10017db96d56Sopenharmony_ci.. literalinclude:: ../../Lib/test/exception_hierarchy.txt
10027db96d56Sopenharmony_ci  :language: text
1003