xref: /third_party/python/Doc/c-api/exceptions.rst (revision 7db96d56)
17db96d56Sopenharmony_ci.. highlight:: c
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. _exceptionhandling:
57db96d56Sopenharmony_ci
67db96d56Sopenharmony_ci******************
77db96d56Sopenharmony_ciException Handling
87db96d56Sopenharmony_ci******************
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ciThe functions described in this chapter will let you handle and raise Python
117db96d56Sopenharmony_ciexceptions.  It is important to understand some of the basics of Python
127db96d56Sopenharmony_ciexception handling.  It works somewhat like the POSIX :c:data:`errno` variable:
137db96d56Sopenharmony_cithere is a global indicator (per thread) of the last error that occurred.  Most
147db96d56Sopenharmony_ciC API functions don't clear this on success, but will set it to indicate the
157db96d56Sopenharmony_cicause of the error on failure.  Most C API functions also return an error
167db96d56Sopenharmony_ciindicator, usually ``NULL`` if they are supposed to return a pointer, or ``-1``
177db96d56Sopenharmony_ciif they return an integer (exception: the ``PyArg_*`` functions
187db96d56Sopenharmony_cireturn ``1`` for success and ``0`` for failure).
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ciConcretely, the error indicator consists of three object pointers: the
217db96d56Sopenharmony_ciexception's type, the exception's value, and the traceback object.  Any
227db96d56Sopenharmony_ciof those pointers can be ``NULL`` if non-set (although some combinations are
237db96d56Sopenharmony_ciforbidden, for example you can't have a non-``NULL`` traceback if the exception
247db96d56Sopenharmony_citype is ``NULL``).
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ciWhen a function must fail because some function it called failed, it generally
277db96d56Sopenharmony_cidoesn't set the error indicator; the function it called already set it.  It is
287db96d56Sopenharmony_ciresponsible for either handling the error and clearing the exception or
297db96d56Sopenharmony_cireturning after cleaning up any resources it holds (such as object references or
307db96d56Sopenharmony_cimemory allocations); it should *not* continue normally if it is not prepared to
317db96d56Sopenharmony_cihandle the error.  If returning due to an error, it is important to indicate to
327db96d56Sopenharmony_cithe caller that an error has been set.  If the error is not handled or carefully
337db96d56Sopenharmony_cipropagated, additional calls into the Python/C API may not behave as intended
347db96d56Sopenharmony_ciand may fail in mysterious ways.
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci.. note::
377db96d56Sopenharmony_ci   The error indicator is **not** the result of :func:`sys.exc_info()`.
387db96d56Sopenharmony_ci   The former corresponds to an exception that is not yet caught (and is
397db96d56Sopenharmony_ci   therefore still propagating), while the latter returns an exception after
407db96d56Sopenharmony_ci   it is caught (and has therefore stopped propagating).
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ciPrinting and clearing
447db96d56Sopenharmony_ci=====================
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci.. c:function:: void PyErr_Clear()
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_ci   Clear the error indicator.  If the error indicator is not set, there is no
507db96d56Sopenharmony_ci   effect.
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci.. c:function:: void PyErr_PrintEx(int set_sys_last_vars)
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci   Print a standard traceback to ``sys.stderr`` and clear the error indicator.
567db96d56Sopenharmony_ci   **Unless** the error is a ``SystemExit``, in that case no traceback is
577db96d56Sopenharmony_ci   printed and the Python process will exit with the error code specified by
587db96d56Sopenharmony_ci   the ``SystemExit`` instance.
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ci   Call this function **only** when the error indicator is set.  Otherwise it
617db96d56Sopenharmony_ci   will cause a fatal error!
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci   If *set_sys_last_vars* is nonzero, the variables :data:`sys.last_type`,
647db96d56Sopenharmony_ci   :data:`sys.last_value` and :data:`sys.last_traceback` will be set to the
657db96d56Sopenharmony_ci   type, value and traceback of the printed exception, respectively.
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci.. c:function:: void PyErr_Print()
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci   Alias for ``PyErr_PrintEx(1)``.
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci
737db96d56Sopenharmony_ci.. c:function:: void PyErr_WriteUnraisable(PyObject *obj)
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci   Call :func:`sys.unraisablehook` using the current exception and *obj*
767db96d56Sopenharmony_ci   argument.
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci   This utility function prints a warning message to ``sys.stderr`` when an
797db96d56Sopenharmony_ci   exception has been set but it is impossible for the interpreter to actually
807db96d56Sopenharmony_ci   raise the exception.  It is used, for example, when an exception occurs in an
817db96d56Sopenharmony_ci   :meth:`__del__` method.
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci   The function is called with a single argument *obj* that identifies the context
847db96d56Sopenharmony_ci   in which the unraisable exception occurred. If possible,
857db96d56Sopenharmony_ci   the repr of *obj* will be printed in the warning message.
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci   An exception must be set when calling this function.
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_ci
907db96d56Sopenharmony_ciRaising exceptions
917db96d56Sopenharmony_ci==================
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ciThese functions help you set the current thread's error indicator.
947db96d56Sopenharmony_ciFor convenience, some of these functions will always return a
957db96d56Sopenharmony_ci``NULL`` pointer for use in a ``return`` statement.
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci
987db96d56Sopenharmony_ci.. c:function:: void PyErr_SetString(PyObject *type, const char *message)
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci   This is the most common way to set the error indicator.  The first argument
1017db96d56Sopenharmony_ci   specifies the exception type; it is normally one of the standard exceptions,
1027db96d56Sopenharmony_ci   e.g. :c:data:`PyExc_RuntimeError`.  You need not increment its reference count.
1037db96d56Sopenharmony_ci   The second argument is an error message; it is decoded from ``'utf-8'``.
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ci.. c:function:: void PyErr_SetObject(PyObject *type, PyObject *value)
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci   This function is similar to :c:func:`PyErr_SetString` but lets you specify an
1097db96d56Sopenharmony_ci   arbitrary Python object for the "value" of the exception.
1107db96d56Sopenharmony_ci
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_Format(PyObject *exception, const char *format, ...)
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci   This function sets the error indicator and returns ``NULL``.  *exception*
1157db96d56Sopenharmony_ci   should be a Python exception class.  The *format* and subsequent
1167db96d56Sopenharmony_ci   parameters help format the error message; they have the same meaning and
1177db96d56Sopenharmony_ci   values as in :c:func:`PyUnicode_FromFormat`. *format* is an ASCII-encoded
1187db96d56Sopenharmony_ci   string.
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_FormatV(PyObject *exception, const char *format, va_list vargs)
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci   Same as :c:func:`PyErr_Format`, but taking a :c:type:`va_list` argument rather
1247db96d56Sopenharmony_ci   than a variable number of arguments.
1257db96d56Sopenharmony_ci
1267db96d56Sopenharmony_ci   .. versionadded:: 3.5
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci.. c:function:: void PyErr_SetNone(PyObject *type)
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci   This is a shorthand for ``PyErr_SetObject(type, Py_None)``.
1327db96d56Sopenharmony_ci
1337db96d56Sopenharmony_ci
1347db96d56Sopenharmony_ci.. c:function:: int PyErr_BadArgument()
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_ci   This is a shorthand for ``PyErr_SetString(PyExc_TypeError, message)``, where
1377db96d56Sopenharmony_ci   *message* indicates that a built-in operation was invoked with an illegal
1387db96d56Sopenharmony_ci   argument.  It is mostly for internal use.
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci
1417db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_NoMemory()
1427db96d56Sopenharmony_ci
1437db96d56Sopenharmony_ci   This is a shorthand for ``PyErr_SetNone(PyExc_MemoryError)``; it returns ``NULL``
1447db96d56Sopenharmony_ci   so an object allocation function can write ``return PyErr_NoMemory();`` when it
1457db96d56Sopenharmony_ci   runs out of memory.
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ci
1487db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_SetFromErrno(PyObject *type)
1497db96d56Sopenharmony_ci
1507db96d56Sopenharmony_ci   .. index:: single: strerror()
1517db96d56Sopenharmony_ci
1527db96d56Sopenharmony_ci   This is a convenience function to raise an exception when a C library function
1537db96d56Sopenharmony_ci   has returned an error and set the C variable :c:data:`errno`.  It constructs a
1547db96d56Sopenharmony_ci   tuple object whose first item is the integer :c:data:`errno` value and whose
1557db96d56Sopenharmony_ci   second item is the corresponding error message (gotten from :c:func:`strerror`),
1567db96d56Sopenharmony_ci   and then calls ``PyErr_SetObject(type, object)``.  On Unix, when the
1577db96d56Sopenharmony_ci   :c:data:`errno` value is :const:`EINTR`, indicating an interrupted system call,
1587db96d56Sopenharmony_ci   this calls :c:func:`PyErr_CheckSignals`, and if that set the error indicator,
1597db96d56Sopenharmony_ci   leaves it set to that.  The function always returns ``NULL``, so a wrapper
1607db96d56Sopenharmony_ci   function around a system call can write ``return PyErr_SetFromErrno(type);``
1617db96d56Sopenharmony_ci   when the system call returns an error.
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_SetFromErrnoWithFilenameObject(PyObject *type, PyObject *filenameObject)
1657db96d56Sopenharmony_ci
1667db96d56Sopenharmony_ci   Similar to :c:func:`PyErr_SetFromErrno`, with the additional behavior that if
1677db96d56Sopenharmony_ci   *filenameObject* is not ``NULL``, it is passed to the constructor of *type* as
1687db96d56Sopenharmony_ci   a third parameter.  In the case of :exc:`OSError` exception,
1697db96d56Sopenharmony_ci   this is used to define the :attr:`filename` attribute of the
1707db96d56Sopenharmony_ci   exception instance.
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci
1737db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_SetFromErrnoWithFilenameObjects(PyObject *type, PyObject *filenameObject, PyObject *filenameObject2)
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci   Similar to :c:func:`PyErr_SetFromErrnoWithFilenameObject`, but takes a second
1767db96d56Sopenharmony_ci   filename object, for raising errors when a function that takes two filenames
1777db96d56Sopenharmony_ci   fails.
1787db96d56Sopenharmony_ci
1797db96d56Sopenharmony_ci   .. versionadded:: 3.4
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci
1827db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_SetFromErrnoWithFilename(PyObject *type, const char *filename)
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ci   Similar to :c:func:`PyErr_SetFromErrnoWithFilenameObject`, but the filename
1857db96d56Sopenharmony_ci   is given as a C string.  *filename* is decoded from the :term:`filesystem
1867db96d56Sopenharmony_ci   encoding and error handler`.
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci
1897db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_SetFromWindowsErr(int ierr)
1907db96d56Sopenharmony_ci
1917db96d56Sopenharmony_ci   This is a convenience function to raise :exc:`WindowsError`. If called with
1927db96d56Sopenharmony_ci   *ierr* of ``0``, the error code returned by a call to :c:func:`GetLastError`
1937db96d56Sopenharmony_ci   is used instead.  It calls the Win32 function :c:func:`FormatMessage` to retrieve
1947db96d56Sopenharmony_ci   the Windows description of error code given by *ierr* or :c:func:`GetLastError`,
1957db96d56Sopenharmony_ci   then it constructs a tuple object whose first item is the *ierr* value and whose
1967db96d56Sopenharmony_ci   second item is the corresponding error message (gotten from
1977db96d56Sopenharmony_ci   :c:func:`FormatMessage`), and then calls ``PyErr_SetObject(PyExc_WindowsError,
1987db96d56Sopenharmony_ci   object)``. This function always returns ``NULL``.
1997db96d56Sopenharmony_ci
2007db96d56Sopenharmony_ci   .. availability:: Windows.
2017db96d56Sopenharmony_ci
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_SetExcFromWindowsErr(PyObject *type, int ierr)
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ci   Similar to :c:func:`PyErr_SetFromWindowsErr`, with an additional parameter
2067db96d56Sopenharmony_ci   specifying the exception type to be raised.
2077db96d56Sopenharmony_ci
2087db96d56Sopenharmony_ci   .. availability:: Windows.
2097db96d56Sopenharmony_ci
2107db96d56Sopenharmony_ci
2117db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_SetFromWindowsErrWithFilename(int ierr, const char *filename)
2127db96d56Sopenharmony_ci
2137db96d56Sopenharmony_ci   Similar to :c:func:`PyErr_SetFromWindowsErrWithFilenameObject`, but the
2147db96d56Sopenharmony_ci   filename is given as a C string.  *filename* is decoded from the filesystem
2157db96d56Sopenharmony_ci   encoding (:func:`os.fsdecode`).
2167db96d56Sopenharmony_ci
2177db96d56Sopenharmony_ci   .. availability:: Windows.
2187db96d56Sopenharmony_ci
2197db96d56Sopenharmony_ci
2207db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_SetExcFromWindowsErrWithFilenameObject(PyObject *type, int ierr, PyObject *filename)
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci   Similar to :c:func:`PyErr_SetFromWindowsErrWithFilenameObject`, with an
2237db96d56Sopenharmony_ci   additional parameter specifying the exception type to be raised.
2247db96d56Sopenharmony_ci
2257db96d56Sopenharmony_ci   .. availability:: Windows.
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ci
2287db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_SetExcFromWindowsErrWithFilenameObjects(PyObject *type, int ierr, PyObject *filename, PyObject *filename2)
2297db96d56Sopenharmony_ci
2307db96d56Sopenharmony_ci   Similar to :c:func:`PyErr_SetExcFromWindowsErrWithFilenameObject`,
2317db96d56Sopenharmony_ci   but accepts a second filename object.
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci   .. availability:: Windows.
2347db96d56Sopenharmony_ci
2357db96d56Sopenharmony_ci   .. versionadded:: 3.4
2367db96d56Sopenharmony_ci
2377db96d56Sopenharmony_ci
2387db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_SetExcFromWindowsErrWithFilename(PyObject *type, int ierr, const char *filename)
2397db96d56Sopenharmony_ci
2407db96d56Sopenharmony_ci   Similar to :c:func:`PyErr_SetFromWindowsErrWithFilename`, with an additional
2417db96d56Sopenharmony_ci   parameter specifying the exception type to be raised.
2427db96d56Sopenharmony_ci
2437db96d56Sopenharmony_ci   .. availability:: Windows.
2447db96d56Sopenharmony_ci
2457db96d56Sopenharmony_ci
2467db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path)
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_ci   This is a convenience function to raise :exc:`ImportError`. *msg* will be
2497db96d56Sopenharmony_ci   set as the exception's message string. *name* and *path*, both of which can
2507db96d56Sopenharmony_ci   be ``NULL``, will be set as the :exc:`ImportError`'s respective ``name``
2517db96d56Sopenharmony_ci   and ``path`` attributes.
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ci   .. versionadded:: 3.3
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci
2567db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_SetImportErrorSubclass(PyObject *exception, PyObject *msg, PyObject *name, PyObject *path)
2577db96d56Sopenharmony_ci
2587db96d56Sopenharmony_ci   Much like :c:func:`PyErr_SetImportError` but this function allows for
2597db96d56Sopenharmony_ci   specifying a subclass of :exc:`ImportError` to raise.
2607db96d56Sopenharmony_ci
2617db96d56Sopenharmony_ci   .. versionadded:: 3.6
2627db96d56Sopenharmony_ci
2637db96d56Sopenharmony_ci
2647db96d56Sopenharmony_ci.. c:function:: void PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset)
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ci   Set file, line, and offset information for the current exception.  If the
2677db96d56Sopenharmony_ci   current exception is not a :exc:`SyntaxError`, then it sets additional
2687db96d56Sopenharmony_ci   attributes, which make the exception printing subsystem think the exception
2697db96d56Sopenharmony_ci   is a :exc:`SyntaxError`.
2707db96d56Sopenharmony_ci
2717db96d56Sopenharmony_ci   .. versionadded:: 3.4
2727db96d56Sopenharmony_ci
2737db96d56Sopenharmony_ci
2747db96d56Sopenharmony_ci.. c:function:: void PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset)
2757db96d56Sopenharmony_ci
2767db96d56Sopenharmony_ci   Like :c:func:`PyErr_SyntaxLocationObject`, but *filename* is a byte string
2777db96d56Sopenharmony_ci   decoded from the :term:`filesystem encoding and error handler`.
2787db96d56Sopenharmony_ci
2797db96d56Sopenharmony_ci   .. versionadded:: 3.2
2807db96d56Sopenharmony_ci
2817db96d56Sopenharmony_ci
2827db96d56Sopenharmony_ci.. c:function:: void PyErr_SyntaxLocation(const char *filename, int lineno)
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ci   Like :c:func:`PyErr_SyntaxLocationEx`, but the *col_offset* parameter is
2857db96d56Sopenharmony_ci   omitted.
2867db96d56Sopenharmony_ci
2877db96d56Sopenharmony_ci
2887db96d56Sopenharmony_ci.. c:function:: void PyErr_BadInternalCall()
2897db96d56Sopenharmony_ci
2907db96d56Sopenharmony_ci   This is a shorthand for ``PyErr_SetString(PyExc_SystemError, message)``,
2917db96d56Sopenharmony_ci   where *message* indicates that an internal operation (e.g. a Python/C API
2927db96d56Sopenharmony_ci   function) was invoked with an illegal argument.  It is mostly for internal
2937db96d56Sopenharmony_ci   use.
2947db96d56Sopenharmony_ci
2957db96d56Sopenharmony_ci
2967db96d56Sopenharmony_ciIssuing warnings
2977db96d56Sopenharmony_ci================
2987db96d56Sopenharmony_ci
2997db96d56Sopenharmony_ciUse these functions to issue warnings from C code.  They mirror similar
3007db96d56Sopenharmony_cifunctions exported by the Python :mod:`warnings` module.  They normally
3017db96d56Sopenharmony_ciprint a warning message to *sys.stderr*; however, it is
3027db96d56Sopenharmony_cialso possible that the user has specified that warnings are to be turned into
3037db96d56Sopenharmony_cierrors, and in that case they will raise an exception.  It is also possible that
3047db96d56Sopenharmony_cithe functions raise an exception because of a problem with the warning machinery.
3057db96d56Sopenharmony_ciThe return value is ``0`` if no exception is raised, or ``-1`` if an exception
3067db96d56Sopenharmony_ciis raised.  (It is not possible to determine whether a warning message is
3077db96d56Sopenharmony_ciactually printed, nor what the reason is for the exception; this is
3087db96d56Sopenharmony_ciintentional.)  If an exception is raised, the caller should do its normal
3097db96d56Sopenharmony_ciexception handling (for example, :c:func:`Py_DECREF` owned references and return
3107db96d56Sopenharmony_cian error value).
3117db96d56Sopenharmony_ci
3127db96d56Sopenharmony_ci.. c:function:: int PyErr_WarnEx(PyObject *category, const char *message, Py_ssize_t stack_level)
3137db96d56Sopenharmony_ci
3147db96d56Sopenharmony_ci   Issue a warning message.  The *category* argument is a warning category (see
3157db96d56Sopenharmony_ci   below) or ``NULL``; the *message* argument is a UTF-8 encoded string.  *stack_level* is a
3167db96d56Sopenharmony_ci   positive number giving a number of stack frames; the warning will be issued from
3177db96d56Sopenharmony_ci   the  currently executing line of code in that stack frame.  A *stack_level* of 1
3187db96d56Sopenharmony_ci   is the function calling :c:func:`PyErr_WarnEx`, 2 is  the function above that,
3197db96d56Sopenharmony_ci   and so forth.
3207db96d56Sopenharmony_ci
3217db96d56Sopenharmony_ci   Warning categories must be subclasses of :c:data:`PyExc_Warning`;
3227db96d56Sopenharmony_ci   :c:data:`PyExc_Warning` is a subclass of :c:data:`PyExc_Exception`;
3237db96d56Sopenharmony_ci   the default warning category is :c:data:`PyExc_RuntimeWarning`. The standard
3247db96d56Sopenharmony_ci   Python warning categories are available as global variables whose names are
3257db96d56Sopenharmony_ci   enumerated at :ref:`standardwarningcategories`.
3267db96d56Sopenharmony_ci
3277db96d56Sopenharmony_ci   For information about warning control, see the documentation for the
3287db96d56Sopenharmony_ci   :mod:`warnings` module and the :option:`-W` option in the command line
3297db96d56Sopenharmony_ci   documentation.  There is no C API for warning control.
3307db96d56Sopenharmony_ci
3317db96d56Sopenharmony_ci
3327db96d56Sopenharmony_ci.. c:function:: int PyErr_WarnExplicitObject(PyObject *category, PyObject *message, PyObject *filename, int lineno, PyObject *module, PyObject *registry)
3337db96d56Sopenharmony_ci
3347db96d56Sopenharmony_ci   Issue a warning message with explicit control over all warning attributes.  This
3357db96d56Sopenharmony_ci   is a straightforward wrapper around the Python function
3367db96d56Sopenharmony_ci   :func:`warnings.warn_explicit`; see there for more information.  The *module*
3377db96d56Sopenharmony_ci   and *registry* arguments may be set to ``NULL`` to get the default effect
3387db96d56Sopenharmony_ci   described there.
3397db96d56Sopenharmony_ci
3407db96d56Sopenharmony_ci   .. versionadded:: 3.4
3417db96d56Sopenharmony_ci
3427db96d56Sopenharmony_ci
3437db96d56Sopenharmony_ci.. c:function:: int PyErr_WarnExplicit(PyObject *category, const char *message, const char *filename, int lineno, const char *module, PyObject *registry)
3447db96d56Sopenharmony_ci
3457db96d56Sopenharmony_ci   Similar to :c:func:`PyErr_WarnExplicitObject` except that *message* and
3467db96d56Sopenharmony_ci   *module* are UTF-8 encoded strings, and *filename* is decoded from the
3477db96d56Sopenharmony_ci   :term:`filesystem encoding and error handler`.
3487db96d56Sopenharmony_ci
3497db96d56Sopenharmony_ci
3507db96d56Sopenharmony_ci.. c:function:: int PyErr_WarnFormat(PyObject *category, Py_ssize_t stack_level, const char *format, ...)
3517db96d56Sopenharmony_ci
3527db96d56Sopenharmony_ci   Function similar to :c:func:`PyErr_WarnEx`, but use
3537db96d56Sopenharmony_ci   :c:func:`PyUnicode_FromFormat` to format the warning message.  *format* is
3547db96d56Sopenharmony_ci   an ASCII-encoded string.
3557db96d56Sopenharmony_ci
3567db96d56Sopenharmony_ci   .. versionadded:: 3.2
3577db96d56Sopenharmony_ci
3587db96d56Sopenharmony_ci
3597db96d56Sopenharmony_ci.. c:function:: int PyErr_ResourceWarning(PyObject *source, Py_ssize_t stack_level, const char *format, ...)
3607db96d56Sopenharmony_ci
3617db96d56Sopenharmony_ci   Function similar to :c:func:`PyErr_WarnFormat`, but *category* is
3627db96d56Sopenharmony_ci   :exc:`ResourceWarning` and it passes *source* to :func:`warnings.WarningMessage`.
3637db96d56Sopenharmony_ci
3647db96d56Sopenharmony_ci   .. versionadded:: 3.6
3657db96d56Sopenharmony_ci
3667db96d56Sopenharmony_ci
3677db96d56Sopenharmony_ciQuerying the error indicator
3687db96d56Sopenharmony_ci============================
3697db96d56Sopenharmony_ci
3707db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_Occurred()
3717db96d56Sopenharmony_ci
3727db96d56Sopenharmony_ci   Test whether the error indicator is set.  If set, return the exception *type*
3737db96d56Sopenharmony_ci   (the first argument to the last call to one of the ``PyErr_Set*``
3747db96d56Sopenharmony_ci   functions or to :c:func:`PyErr_Restore`).  If not set, return ``NULL``.  You do not
3757db96d56Sopenharmony_ci   own a reference to the return value, so you do not need to :c:func:`Py_DECREF`
3767db96d56Sopenharmony_ci   it.
3777db96d56Sopenharmony_ci
3787db96d56Sopenharmony_ci   The caller must hold the GIL.
3797db96d56Sopenharmony_ci
3807db96d56Sopenharmony_ci   .. note::
3817db96d56Sopenharmony_ci
3827db96d56Sopenharmony_ci      Do not compare the return value to a specific exception; use
3837db96d56Sopenharmony_ci      :c:func:`PyErr_ExceptionMatches` instead, shown below.  (The comparison could
3847db96d56Sopenharmony_ci      easily fail since the exception may be an instance instead of a class, in the
3857db96d56Sopenharmony_ci      case of a class exception, or it may be a subclass of the expected exception.)
3867db96d56Sopenharmony_ci
3877db96d56Sopenharmony_ci
3887db96d56Sopenharmony_ci.. c:function:: int PyErr_ExceptionMatches(PyObject *exc)
3897db96d56Sopenharmony_ci
3907db96d56Sopenharmony_ci   Equivalent to ``PyErr_GivenExceptionMatches(PyErr_Occurred(), exc)``.  This
3917db96d56Sopenharmony_ci   should only be called when an exception is actually set; a memory access
3927db96d56Sopenharmony_ci   violation will occur if no exception has been raised.
3937db96d56Sopenharmony_ci
3947db96d56Sopenharmony_ci
3957db96d56Sopenharmony_ci.. c:function:: int PyErr_GivenExceptionMatches(PyObject *given, PyObject *exc)
3967db96d56Sopenharmony_ci
3977db96d56Sopenharmony_ci   Return true if the *given* exception matches the exception type in *exc*.  If
3987db96d56Sopenharmony_ci   *exc* is a class object, this also returns true when *given* is an instance
3997db96d56Sopenharmony_ci   of a subclass.  If *exc* is a tuple, all exception types in the tuple (and
4007db96d56Sopenharmony_ci   recursively in subtuples) are searched for a match.
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ci
4037db96d56Sopenharmony_ci.. c:function:: void PyErr_Fetch(PyObject **ptype, PyObject **pvalue, PyObject **ptraceback)
4047db96d56Sopenharmony_ci
4057db96d56Sopenharmony_ci   Retrieve the error indicator into three variables whose addresses are passed.
4067db96d56Sopenharmony_ci   If the error indicator is not set, set all three variables to ``NULL``.  If it is
4077db96d56Sopenharmony_ci   set, it will be cleared and you own a reference to each object retrieved.  The
4087db96d56Sopenharmony_ci   value and traceback object may be ``NULL`` even when the type object is not.
4097db96d56Sopenharmony_ci
4107db96d56Sopenharmony_ci   .. note::
4117db96d56Sopenharmony_ci
4127db96d56Sopenharmony_ci      This function is normally only used by code that needs to catch exceptions or
4137db96d56Sopenharmony_ci      by code that needs to save and restore the error indicator temporarily, e.g.::
4147db96d56Sopenharmony_ci
4157db96d56Sopenharmony_ci         {
4167db96d56Sopenharmony_ci            PyObject *type, *value, *traceback;
4177db96d56Sopenharmony_ci            PyErr_Fetch(&type, &value, &traceback);
4187db96d56Sopenharmony_ci
4197db96d56Sopenharmony_ci            /* ... code that might produce other errors ... */
4207db96d56Sopenharmony_ci
4217db96d56Sopenharmony_ci            PyErr_Restore(type, value, traceback);
4227db96d56Sopenharmony_ci         }
4237db96d56Sopenharmony_ci
4247db96d56Sopenharmony_ci
4257db96d56Sopenharmony_ci.. c:function:: void PyErr_Restore(PyObject *type, PyObject *value, PyObject *traceback)
4267db96d56Sopenharmony_ci
4277db96d56Sopenharmony_ci   Set  the error indicator from the three objects.  If the error indicator is
4287db96d56Sopenharmony_ci   already set, it is cleared first.  If the objects are ``NULL``, the error
4297db96d56Sopenharmony_ci   indicator is cleared.  Do not pass a ``NULL`` type and non-``NULL`` value or
4307db96d56Sopenharmony_ci   traceback.  The exception type should be a class.  Do not pass an invalid
4317db96d56Sopenharmony_ci   exception type or value. (Violating these rules will cause subtle problems
4327db96d56Sopenharmony_ci   later.)  This call takes away a reference to each object: you must own a
4337db96d56Sopenharmony_ci   reference to each object before the call and after the call you no longer own
4347db96d56Sopenharmony_ci   these references.  (If you don't understand this, don't use this function.  I
4357db96d56Sopenharmony_ci   warned you.)
4367db96d56Sopenharmony_ci
4377db96d56Sopenharmony_ci   .. note::
4387db96d56Sopenharmony_ci
4397db96d56Sopenharmony_ci      This function is normally only used by code that needs to save and restore the
4407db96d56Sopenharmony_ci      error indicator temporarily.  Use :c:func:`PyErr_Fetch` to save the current
4417db96d56Sopenharmony_ci      error indicator.
4427db96d56Sopenharmony_ci
4437db96d56Sopenharmony_ci
4447db96d56Sopenharmony_ci.. c:function:: void PyErr_NormalizeException(PyObject **exc, PyObject **val, PyObject **tb)
4457db96d56Sopenharmony_ci
4467db96d56Sopenharmony_ci   Under certain circumstances, the values returned by :c:func:`PyErr_Fetch` below
4477db96d56Sopenharmony_ci   can be "unnormalized", meaning that ``*exc`` is a class object but ``*val`` is
4487db96d56Sopenharmony_ci   not an instance of the  same class.  This function can be used to instantiate
4497db96d56Sopenharmony_ci   the class in that case.  If the values are already normalized, nothing happens.
4507db96d56Sopenharmony_ci   The delayed normalization is implemented to improve performance.
4517db96d56Sopenharmony_ci
4527db96d56Sopenharmony_ci   .. note::
4537db96d56Sopenharmony_ci
4547db96d56Sopenharmony_ci      This function *does not* implicitly set the ``__traceback__``
4557db96d56Sopenharmony_ci      attribute on the exception value. If setting the traceback
4567db96d56Sopenharmony_ci      appropriately is desired, the following additional snippet is needed::
4577db96d56Sopenharmony_ci
4587db96d56Sopenharmony_ci         if (tb != NULL) {
4597db96d56Sopenharmony_ci           PyException_SetTraceback(val, tb);
4607db96d56Sopenharmony_ci         }
4617db96d56Sopenharmony_ci
4627db96d56Sopenharmony_ci
4637db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_GetHandledException(void)
4647db96d56Sopenharmony_ci
4657db96d56Sopenharmony_ci   Retrieve the active exception instance, as would be returned by :func:`sys.exception`.
4667db96d56Sopenharmony_ci   This refers to an exception that was *already caught*, not to an exception that was
4677db96d56Sopenharmony_ci   freshly raised. Returns a new reference to the exception or ``NULL``.
4687db96d56Sopenharmony_ci   Does not modify the interpreter's exception state.
4697db96d56Sopenharmony_ci
4707db96d56Sopenharmony_ci   .. note::
4717db96d56Sopenharmony_ci
4727db96d56Sopenharmony_ci      This function is not normally used by code that wants to handle exceptions.
4737db96d56Sopenharmony_ci      Rather, it can be used when code needs to save and restore the exception
4747db96d56Sopenharmony_ci      state temporarily.  Use :c:func:`PyErr_SetHandledException` to restore or
4757db96d56Sopenharmony_ci      clear the exception state.
4767db96d56Sopenharmony_ci
4777db96d56Sopenharmony_ci   .. versionadded:: 3.11
4787db96d56Sopenharmony_ci
4797db96d56Sopenharmony_ci.. c:function:: void PyErr_SetHandledException(PyObject *exc)
4807db96d56Sopenharmony_ci
4817db96d56Sopenharmony_ci   Set the active exception, as known from ``sys.exception()``.  This refers
4827db96d56Sopenharmony_ci   to an exception that was *already caught*, not to an exception that was
4837db96d56Sopenharmony_ci   freshly raised.
4847db96d56Sopenharmony_ci   To clear the exception state, pass ``NULL``.
4857db96d56Sopenharmony_ci
4867db96d56Sopenharmony_ci   .. note::
4877db96d56Sopenharmony_ci
4887db96d56Sopenharmony_ci      This function is not normally used by code that wants to handle exceptions.
4897db96d56Sopenharmony_ci      Rather, it can be used when code needs to save and restore the exception
4907db96d56Sopenharmony_ci      state temporarily.  Use :c:func:`PyErr_GetHandledException` to get the exception
4917db96d56Sopenharmony_ci      state.
4927db96d56Sopenharmony_ci
4937db96d56Sopenharmony_ci   .. versionadded:: 3.11
4947db96d56Sopenharmony_ci
4957db96d56Sopenharmony_ci.. c:function:: void PyErr_GetExcInfo(PyObject **ptype, PyObject **pvalue, PyObject **ptraceback)
4967db96d56Sopenharmony_ci
4977db96d56Sopenharmony_ci   Retrieve the old-style representation of the exception info, as known from
4987db96d56Sopenharmony_ci   :func:`sys.exc_info`.  This refers to an exception that was *already caught*,
4997db96d56Sopenharmony_ci   not to an exception that was freshly raised.  Returns new references for the
5007db96d56Sopenharmony_ci   three objects, any of which may be ``NULL``.  Does not modify the exception
5017db96d56Sopenharmony_ci   info state.  This function is kept for backwards compatibility. Prefer using
5027db96d56Sopenharmony_ci   :c:func:`PyErr_GetHandledException`.
5037db96d56Sopenharmony_ci
5047db96d56Sopenharmony_ci   .. note::
5057db96d56Sopenharmony_ci
5067db96d56Sopenharmony_ci      This function is not normally used by code that wants to handle exceptions.
5077db96d56Sopenharmony_ci      Rather, it can be used when code needs to save and restore the exception
5087db96d56Sopenharmony_ci      state temporarily.  Use :c:func:`PyErr_SetExcInfo` to restore or clear the
5097db96d56Sopenharmony_ci      exception state.
5107db96d56Sopenharmony_ci
5117db96d56Sopenharmony_ci   .. versionadded:: 3.3
5127db96d56Sopenharmony_ci
5137db96d56Sopenharmony_ci
5147db96d56Sopenharmony_ci.. c:function:: void PyErr_SetExcInfo(PyObject *type, PyObject *value, PyObject *traceback)
5157db96d56Sopenharmony_ci
5167db96d56Sopenharmony_ci   Set the exception info, as known from ``sys.exc_info()``.  This refers
5177db96d56Sopenharmony_ci   to an exception that was *already caught*, not to an exception that was
5187db96d56Sopenharmony_ci   freshly raised.  This function steals the references of the arguments.
5197db96d56Sopenharmony_ci   To clear the exception state, pass ``NULL`` for all three arguments.
5207db96d56Sopenharmony_ci   This function is kept for backwards compatibility. Prefer using
5217db96d56Sopenharmony_ci   :c:func:`PyErr_SetHandledException`.
5227db96d56Sopenharmony_ci
5237db96d56Sopenharmony_ci   .. note::
5247db96d56Sopenharmony_ci
5257db96d56Sopenharmony_ci      This function is not normally used by code that wants to handle exceptions.
5267db96d56Sopenharmony_ci      Rather, it can be used when code needs to save and restore the exception
5277db96d56Sopenharmony_ci      state temporarily.  Use :c:func:`PyErr_GetExcInfo` to read the exception
5287db96d56Sopenharmony_ci      state.
5297db96d56Sopenharmony_ci
5307db96d56Sopenharmony_ci   .. versionadded:: 3.3
5317db96d56Sopenharmony_ci
5327db96d56Sopenharmony_ci   .. versionchanged:: 3.11
5337db96d56Sopenharmony_ci      The ``type`` and ``traceback`` arguments are no longer used and
5347db96d56Sopenharmony_ci      can be NULL. The interpreter now derives them from the exception
5357db96d56Sopenharmony_ci      instance (the ``value`` argument). The function still steals
5367db96d56Sopenharmony_ci      references of all three arguments.
5377db96d56Sopenharmony_ci
5387db96d56Sopenharmony_ci
5397db96d56Sopenharmony_ciSignal Handling
5407db96d56Sopenharmony_ci===============
5417db96d56Sopenharmony_ci
5427db96d56Sopenharmony_ci
5437db96d56Sopenharmony_ci.. c:function:: int PyErr_CheckSignals()
5447db96d56Sopenharmony_ci
5457db96d56Sopenharmony_ci   .. index::
5467db96d56Sopenharmony_ci      pair: module; signal
5477db96d56Sopenharmony_ci      single: SIGINT
5487db96d56Sopenharmony_ci      single: KeyboardInterrupt (built-in exception)
5497db96d56Sopenharmony_ci
5507db96d56Sopenharmony_ci   This function interacts with Python's signal handling.
5517db96d56Sopenharmony_ci
5527db96d56Sopenharmony_ci   If the function is called from the main thread and under the main Python
5537db96d56Sopenharmony_ci   interpreter, it checks whether a signal has been sent to the processes
5547db96d56Sopenharmony_ci   and if so, invokes the corresponding signal handler.  If the :mod:`signal`
5557db96d56Sopenharmony_ci   module is supported, this can invoke a signal handler written in Python.
5567db96d56Sopenharmony_ci
5577db96d56Sopenharmony_ci   The function attempts to handle all pending signals, and then returns ``0``.
5587db96d56Sopenharmony_ci   However, if a Python signal handler raises an exception, the error
5597db96d56Sopenharmony_ci   indicator is set and the function returns ``-1`` immediately (such that
5607db96d56Sopenharmony_ci   other pending signals may not have been handled yet: they will be on the
5617db96d56Sopenharmony_ci   next :c:func:`PyErr_CheckSignals()` invocation).
5627db96d56Sopenharmony_ci
5637db96d56Sopenharmony_ci   If the function is called from a non-main thread, or under a non-main
5647db96d56Sopenharmony_ci   Python interpreter, it does nothing and returns ``0``.
5657db96d56Sopenharmony_ci
5667db96d56Sopenharmony_ci   This function can be called by long-running C code that wants to
5677db96d56Sopenharmony_ci   be interruptible by user requests (such as by pressing Ctrl-C).
5687db96d56Sopenharmony_ci
5697db96d56Sopenharmony_ci   .. note::
5707db96d56Sopenharmony_ci      The default Python signal handler for :const:`SIGINT` raises the
5717db96d56Sopenharmony_ci      :exc:`KeyboardInterrupt` exception.
5727db96d56Sopenharmony_ci
5737db96d56Sopenharmony_ci
5747db96d56Sopenharmony_ci.. c:function:: void PyErr_SetInterrupt()
5757db96d56Sopenharmony_ci
5767db96d56Sopenharmony_ci   .. index::
5777db96d56Sopenharmony_ci      pair: module; signal
5787db96d56Sopenharmony_ci      single: SIGINT
5797db96d56Sopenharmony_ci      single: KeyboardInterrupt (built-in exception)
5807db96d56Sopenharmony_ci
5817db96d56Sopenharmony_ci   Simulate the effect of a :const:`SIGINT` signal arriving.
5827db96d56Sopenharmony_ci   This is equivalent to ``PyErr_SetInterruptEx(SIGINT)``.
5837db96d56Sopenharmony_ci
5847db96d56Sopenharmony_ci   .. note::
5857db96d56Sopenharmony_ci      This function is async-signal-safe.  It can be called without
5867db96d56Sopenharmony_ci      the :term:`GIL` and from a C signal handler.
5877db96d56Sopenharmony_ci
5887db96d56Sopenharmony_ci
5897db96d56Sopenharmony_ci.. c:function:: int PyErr_SetInterruptEx(int signum)
5907db96d56Sopenharmony_ci
5917db96d56Sopenharmony_ci   .. index::
5927db96d56Sopenharmony_ci      pair: module; signal
5937db96d56Sopenharmony_ci      single: KeyboardInterrupt (built-in exception)
5947db96d56Sopenharmony_ci
5957db96d56Sopenharmony_ci   Simulate the effect of a signal arriving. The next time
5967db96d56Sopenharmony_ci   :c:func:`PyErr_CheckSignals` is called,  the Python signal handler for
5977db96d56Sopenharmony_ci   the given signal number will be called.
5987db96d56Sopenharmony_ci
5997db96d56Sopenharmony_ci   This function can be called by C code that sets up its own signal handling
6007db96d56Sopenharmony_ci   and wants Python signal handlers to be invoked as expected when an
6017db96d56Sopenharmony_ci   interruption is requested (for example when the user presses Ctrl-C
6027db96d56Sopenharmony_ci   to interrupt an operation).
6037db96d56Sopenharmony_ci
6047db96d56Sopenharmony_ci   If the given signal isn't handled by Python (it was set to
6057db96d56Sopenharmony_ci   :data:`signal.SIG_DFL` or :data:`signal.SIG_IGN`), it will be ignored.
6067db96d56Sopenharmony_ci
6077db96d56Sopenharmony_ci   If *signum* is outside of the allowed range of signal numbers, ``-1``
6087db96d56Sopenharmony_ci   is returned.  Otherwise, ``0`` is returned.  The error indicator is
6097db96d56Sopenharmony_ci   never changed by this function.
6107db96d56Sopenharmony_ci
6117db96d56Sopenharmony_ci   .. note::
6127db96d56Sopenharmony_ci      This function is async-signal-safe.  It can be called without
6137db96d56Sopenharmony_ci      the :term:`GIL` and from a C signal handler.
6147db96d56Sopenharmony_ci
6157db96d56Sopenharmony_ci   .. versionadded:: 3.10
6167db96d56Sopenharmony_ci
6177db96d56Sopenharmony_ci
6187db96d56Sopenharmony_ci.. c:function:: int PySignal_SetWakeupFd(int fd)
6197db96d56Sopenharmony_ci
6207db96d56Sopenharmony_ci   This utility function specifies a file descriptor to which the signal number
6217db96d56Sopenharmony_ci   is written as a single byte whenever a signal is received. *fd* must be
6227db96d56Sopenharmony_ci   non-blocking. It returns the previous such file descriptor.
6237db96d56Sopenharmony_ci
6247db96d56Sopenharmony_ci   The value ``-1`` disables the feature; this is the initial state.
6257db96d56Sopenharmony_ci   This is equivalent to :func:`signal.set_wakeup_fd` in Python, but without any
6267db96d56Sopenharmony_ci   error checking.  *fd* should be a valid file descriptor.  The function should
6277db96d56Sopenharmony_ci   only be called from the main thread.
6287db96d56Sopenharmony_ci
6297db96d56Sopenharmony_ci   .. versionchanged:: 3.5
6307db96d56Sopenharmony_ci      On Windows, the function now also supports socket handles.
6317db96d56Sopenharmony_ci
6327db96d56Sopenharmony_ci
6337db96d56Sopenharmony_ciException Classes
6347db96d56Sopenharmony_ci=================
6357db96d56Sopenharmony_ci
6367db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_NewException(const char *name, PyObject *base, PyObject *dict)
6377db96d56Sopenharmony_ci
6387db96d56Sopenharmony_ci   This utility function creates and returns a new exception class. The *name*
6397db96d56Sopenharmony_ci   argument must be the name of the new exception, a C string of the form
6407db96d56Sopenharmony_ci   ``module.classname``.  The *base* and *dict* arguments are normally ``NULL``.
6417db96d56Sopenharmony_ci   This creates a class object derived from :exc:`Exception` (accessible in C as
6427db96d56Sopenharmony_ci   :c:data:`PyExc_Exception`).
6437db96d56Sopenharmony_ci
6447db96d56Sopenharmony_ci   The :attr:`__module__` attribute of the new class is set to the first part (up
6457db96d56Sopenharmony_ci   to the last dot) of the *name* argument, and the class name is set to the last
6467db96d56Sopenharmony_ci   part (after the last dot).  The *base* argument can be used to specify alternate
6477db96d56Sopenharmony_ci   base classes; it can either be only one class or a tuple of classes. The *dict*
6487db96d56Sopenharmony_ci   argument can be used to specify a dictionary of class variables and methods.
6497db96d56Sopenharmony_ci
6507db96d56Sopenharmony_ci
6517db96d56Sopenharmony_ci.. c:function:: PyObject* PyErr_NewExceptionWithDoc(const char *name, const char *doc, PyObject *base, PyObject *dict)
6527db96d56Sopenharmony_ci
6537db96d56Sopenharmony_ci   Same as :c:func:`PyErr_NewException`, except that the new exception class can
6547db96d56Sopenharmony_ci   easily be given a docstring: If *doc* is non-``NULL``, it will be used as the
6557db96d56Sopenharmony_ci   docstring for the exception class.
6567db96d56Sopenharmony_ci
6577db96d56Sopenharmony_ci   .. versionadded:: 3.2
6587db96d56Sopenharmony_ci
6597db96d56Sopenharmony_ci
6607db96d56Sopenharmony_ciException Objects
6617db96d56Sopenharmony_ci=================
6627db96d56Sopenharmony_ci
6637db96d56Sopenharmony_ci.. c:function:: PyObject* PyException_GetTraceback(PyObject *ex)
6647db96d56Sopenharmony_ci
6657db96d56Sopenharmony_ci   Return the traceback associated with the exception as a new reference, as
6667db96d56Sopenharmony_ci   accessible from Python through :attr:`__traceback__`.  If there is no
6677db96d56Sopenharmony_ci   traceback associated, this returns ``NULL``.
6687db96d56Sopenharmony_ci
6697db96d56Sopenharmony_ci
6707db96d56Sopenharmony_ci.. c:function:: int PyException_SetTraceback(PyObject *ex, PyObject *tb)
6717db96d56Sopenharmony_ci
6727db96d56Sopenharmony_ci   Set the traceback associated with the exception to *tb*.  Use ``Py_None`` to
6737db96d56Sopenharmony_ci   clear it.
6747db96d56Sopenharmony_ci
6757db96d56Sopenharmony_ci
6767db96d56Sopenharmony_ci.. c:function:: PyObject* PyException_GetContext(PyObject *ex)
6777db96d56Sopenharmony_ci
6787db96d56Sopenharmony_ci   Return the context (another exception instance during whose handling *ex* was
6797db96d56Sopenharmony_ci   raised) associated with the exception as a new reference, as accessible from
6807db96d56Sopenharmony_ci   Python through :attr:`__context__`.  If there is no context associated, this
6817db96d56Sopenharmony_ci   returns ``NULL``.
6827db96d56Sopenharmony_ci
6837db96d56Sopenharmony_ci
6847db96d56Sopenharmony_ci.. c:function:: void PyException_SetContext(PyObject *ex, PyObject *ctx)
6857db96d56Sopenharmony_ci
6867db96d56Sopenharmony_ci   Set the context associated with the exception to *ctx*.  Use ``NULL`` to clear
6877db96d56Sopenharmony_ci   it.  There is no type check to make sure that *ctx* is an exception instance.
6887db96d56Sopenharmony_ci   This steals a reference to *ctx*.
6897db96d56Sopenharmony_ci
6907db96d56Sopenharmony_ci
6917db96d56Sopenharmony_ci.. c:function:: PyObject* PyException_GetCause(PyObject *ex)
6927db96d56Sopenharmony_ci
6937db96d56Sopenharmony_ci   Return the cause (either an exception instance, or :const:`None`,
6947db96d56Sopenharmony_ci   set by ``raise ... from ...``) associated with the exception as a new
6957db96d56Sopenharmony_ci   reference, as accessible from Python through :attr:`__cause__`.
6967db96d56Sopenharmony_ci
6977db96d56Sopenharmony_ci
6987db96d56Sopenharmony_ci.. c:function:: void PyException_SetCause(PyObject *ex, PyObject *cause)
6997db96d56Sopenharmony_ci
7007db96d56Sopenharmony_ci   Set the cause associated with the exception to *cause*.  Use ``NULL`` to clear
7017db96d56Sopenharmony_ci   it.  There is no type check to make sure that *cause* is either an exception
7027db96d56Sopenharmony_ci   instance or :const:`None`.  This steals a reference to *cause*.
7037db96d56Sopenharmony_ci
7047db96d56Sopenharmony_ci   :attr:`__suppress_context__` is implicitly set to ``True`` by this function.
7057db96d56Sopenharmony_ci
7067db96d56Sopenharmony_ci
7077db96d56Sopenharmony_ci.. _unicodeexceptions:
7087db96d56Sopenharmony_ci
7097db96d56Sopenharmony_ciUnicode Exception Objects
7107db96d56Sopenharmony_ci=========================
7117db96d56Sopenharmony_ci
7127db96d56Sopenharmony_ciThe following functions are used to create and modify Unicode exceptions from C.
7137db96d56Sopenharmony_ci
7147db96d56Sopenharmony_ci.. c:function:: PyObject* PyUnicodeDecodeError_Create(const char *encoding, const char *object, Py_ssize_t length, Py_ssize_t start, Py_ssize_t end, const char *reason)
7157db96d56Sopenharmony_ci
7167db96d56Sopenharmony_ci   Create a :class:`UnicodeDecodeError` object with the attributes *encoding*,
7177db96d56Sopenharmony_ci   *object*, *length*, *start*, *end* and *reason*. *encoding* and *reason* are
7187db96d56Sopenharmony_ci   UTF-8 encoded strings.
7197db96d56Sopenharmony_ci
7207db96d56Sopenharmony_ci.. c:function:: PyObject* PyUnicodeDecodeError_GetEncoding(PyObject *exc)
7217db96d56Sopenharmony_ci                PyObject* PyUnicodeEncodeError_GetEncoding(PyObject *exc)
7227db96d56Sopenharmony_ci
7237db96d56Sopenharmony_ci   Return the *encoding* attribute of the given exception object.
7247db96d56Sopenharmony_ci
7257db96d56Sopenharmony_ci.. c:function:: PyObject* PyUnicodeDecodeError_GetObject(PyObject *exc)
7267db96d56Sopenharmony_ci                PyObject* PyUnicodeEncodeError_GetObject(PyObject *exc)
7277db96d56Sopenharmony_ci                PyObject* PyUnicodeTranslateError_GetObject(PyObject *exc)
7287db96d56Sopenharmony_ci
7297db96d56Sopenharmony_ci   Return the *object* attribute of the given exception object.
7307db96d56Sopenharmony_ci
7317db96d56Sopenharmony_ci.. c:function:: int PyUnicodeDecodeError_GetStart(PyObject *exc, Py_ssize_t *start)
7327db96d56Sopenharmony_ci                int PyUnicodeEncodeError_GetStart(PyObject *exc, Py_ssize_t *start)
7337db96d56Sopenharmony_ci                int PyUnicodeTranslateError_GetStart(PyObject *exc, Py_ssize_t *start)
7347db96d56Sopenharmony_ci
7357db96d56Sopenharmony_ci   Get the *start* attribute of the given exception object and place it into
7367db96d56Sopenharmony_ci   *\*start*.  *start* must not be ``NULL``.  Return ``0`` on success, ``-1`` on
7377db96d56Sopenharmony_ci   failure.
7387db96d56Sopenharmony_ci
7397db96d56Sopenharmony_ci.. c:function:: int PyUnicodeDecodeError_SetStart(PyObject *exc, Py_ssize_t start)
7407db96d56Sopenharmony_ci                int PyUnicodeEncodeError_SetStart(PyObject *exc, Py_ssize_t start)
7417db96d56Sopenharmony_ci                int PyUnicodeTranslateError_SetStart(PyObject *exc, Py_ssize_t start)
7427db96d56Sopenharmony_ci
7437db96d56Sopenharmony_ci   Set the *start* attribute of the given exception object to *start*.  Return
7447db96d56Sopenharmony_ci   ``0`` on success, ``-1`` on failure.
7457db96d56Sopenharmony_ci
7467db96d56Sopenharmony_ci.. c:function:: int PyUnicodeDecodeError_GetEnd(PyObject *exc, Py_ssize_t *end)
7477db96d56Sopenharmony_ci                int PyUnicodeEncodeError_GetEnd(PyObject *exc, Py_ssize_t *end)
7487db96d56Sopenharmony_ci                int PyUnicodeTranslateError_GetEnd(PyObject *exc, Py_ssize_t *end)
7497db96d56Sopenharmony_ci
7507db96d56Sopenharmony_ci   Get the *end* attribute of the given exception object and place it into
7517db96d56Sopenharmony_ci   *\*end*.  *end* must not be ``NULL``.  Return ``0`` on success, ``-1`` on
7527db96d56Sopenharmony_ci   failure.
7537db96d56Sopenharmony_ci
7547db96d56Sopenharmony_ci.. c:function:: int PyUnicodeDecodeError_SetEnd(PyObject *exc, Py_ssize_t end)
7557db96d56Sopenharmony_ci                int PyUnicodeEncodeError_SetEnd(PyObject *exc, Py_ssize_t end)
7567db96d56Sopenharmony_ci                int PyUnicodeTranslateError_SetEnd(PyObject *exc, Py_ssize_t end)
7577db96d56Sopenharmony_ci
7587db96d56Sopenharmony_ci   Set the *end* attribute of the given exception object to *end*.  Return ``0``
7597db96d56Sopenharmony_ci   on success, ``-1`` on failure.
7607db96d56Sopenharmony_ci
7617db96d56Sopenharmony_ci.. c:function:: PyObject* PyUnicodeDecodeError_GetReason(PyObject *exc)
7627db96d56Sopenharmony_ci                PyObject* PyUnicodeEncodeError_GetReason(PyObject *exc)
7637db96d56Sopenharmony_ci                PyObject* PyUnicodeTranslateError_GetReason(PyObject *exc)
7647db96d56Sopenharmony_ci
7657db96d56Sopenharmony_ci   Return the *reason* attribute of the given exception object.
7667db96d56Sopenharmony_ci
7677db96d56Sopenharmony_ci.. c:function:: int PyUnicodeDecodeError_SetReason(PyObject *exc, const char *reason)
7687db96d56Sopenharmony_ci                int PyUnicodeEncodeError_SetReason(PyObject *exc, const char *reason)
7697db96d56Sopenharmony_ci                int PyUnicodeTranslateError_SetReason(PyObject *exc, const char *reason)
7707db96d56Sopenharmony_ci
7717db96d56Sopenharmony_ci   Set the *reason* attribute of the given exception object to *reason*.  Return
7727db96d56Sopenharmony_ci   ``0`` on success, ``-1`` on failure.
7737db96d56Sopenharmony_ci
7747db96d56Sopenharmony_ci
7757db96d56Sopenharmony_ci.. _recursion:
7767db96d56Sopenharmony_ci
7777db96d56Sopenharmony_ciRecursion Control
7787db96d56Sopenharmony_ci=================
7797db96d56Sopenharmony_ci
7807db96d56Sopenharmony_ciThese two functions provide a way to perform safe recursive calls at the C
7817db96d56Sopenharmony_cilevel, both in the core and in extension modules.  They are needed if the
7827db96d56Sopenharmony_cirecursive code does not necessarily invoke Python code (which tracks its
7837db96d56Sopenharmony_cirecursion depth automatically).
7847db96d56Sopenharmony_ciThey are also not needed for *tp_call* implementations
7857db96d56Sopenharmony_cibecause the :ref:`call protocol <call>` takes care of recursion handling.
7867db96d56Sopenharmony_ci
7877db96d56Sopenharmony_ci.. c:function:: int Py_EnterRecursiveCall(const char *where)
7887db96d56Sopenharmony_ci
7897db96d56Sopenharmony_ci   Marks a point where a recursive C-level call is about to be performed.
7907db96d56Sopenharmony_ci
7917db96d56Sopenharmony_ci   If :const:`USE_STACKCHECK` is defined, this function checks if the OS
7927db96d56Sopenharmony_ci   stack overflowed using :c:func:`PyOS_CheckStack`.  In this is the case, it
7937db96d56Sopenharmony_ci   sets a :exc:`MemoryError` and returns a nonzero value.
7947db96d56Sopenharmony_ci
7957db96d56Sopenharmony_ci   The function then checks if the recursion limit is reached.  If this is the
7967db96d56Sopenharmony_ci   case, a :exc:`RecursionError` is set and a nonzero value is returned.
7977db96d56Sopenharmony_ci   Otherwise, zero is returned.
7987db96d56Sopenharmony_ci
7997db96d56Sopenharmony_ci   *where* should be a UTF-8 encoded string such as ``" in instance check"`` to
8007db96d56Sopenharmony_ci   be concatenated to the :exc:`RecursionError` message caused by the recursion
8017db96d56Sopenharmony_ci   depth limit.
8027db96d56Sopenharmony_ci
8037db96d56Sopenharmony_ci   .. versionchanged:: 3.9
8047db96d56Sopenharmony_ci      This function is now also available in the limited API.
8057db96d56Sopenharmony_ci
8067db96d56Sopenharmony_ci.. c:function:: void Py_LeaveRecursiveCall(void)
8077db96d56Sopenharmony_ci
8087db96d56Sopenharmony_ci   Ends a :c:func:`Py_EnterRecursiveCall`.  Must be called once for each
8097db96d56Sopenharmony_ci   *successful* invocation of :c:func:`Py_EnterRecursiveCall`.
8107db96d56Sopenharmony_ci
8117db96d56Sopenharmony_ci   .. versionchanged:: 3.9
8127db96d56Sopenharmony_ci      This function is now also available in the limited API.
8137db96d56Sopenharmony_ci
8147db96d56Sopenharmony_ciProperly implementing :c:member:`~PyTypeObject.tp_repr` for container types requires
8157db96d56Sopenharmony_cispecial recursion handling.  In addition to protecting the stack,
8167db96d56Sopenharmony_ci:c:member:`~PyTypeObject.tp_repr` also needs to track objects to prevent cycles.  The
8177db96d56Sopenharmony_cifollowing two functions facilitate this functionality.  Effectively,
8187db96d56Sopenharmony_cithese are the C equivalent to :func:`reprlib.recursive_repr`.
8197db96d56Sopenharmony_ci
8207db96d56Sopenharmony_ci.. c:function:: int Py_ReprEnter(PyObject *object)
8217db96d56Sopenharmony_ci
8227db96d56Sopenharmony_ci   Called at the beginning of the :c:member:`~PyTypeObject.tp_repr` implementation to
8237db96d56Sopenharmony_ci   detect cycles.
8247db96d56Sopenharmony_ci
8257db96d56Sopenharmony_ci   If the object has already been processed, the function returns a
8267db96d56Sopenharmony_ci   positive integer.  In that case the :c:member:`~PyTypeObject.tp_repr` implementation
8277db96d56Sopenharmony_ci   should return a string object indicating a cycle.  As examples,
8287db96d56Sopenharmony_ci   :class:`dict` objects return ``{...}`` and :class:`list` objects
8297db96d56Sopenharmony_ci   return ``[...]``.
8307db96d56Sopenharmony_ci
8317db96d56Sopenharmony_ci   The function will return a negative integer if the recursion limit
8327db96d56Sopenharmony_ci   is reached.  In that case the :c:member:`~PyTypeObject.tp_repr` implementation should
8337db96d56Sopenharmony_ci   typically return ``NULL``.
8347db96d56Sopenharmony_ci
8357db96d56Sopenharmony_ci   Otherwise, the function returns zero and the :c:member:`~PyTypeObject.tp_repr`
8367db96d56Sopenharmony_ci   implementation can continue normally.
8377db96d56Sopenharmony_ci
8387db96d56Sopenharmony_ci.. c:function:: void Py_ReprLeave(PyObject *object)
8397db96d56Sopenharmony_ci
8407db96d56Sopenharmony_ci   Ends a :c:func:`Py_ReprEnter`.  Must be called once for each
8417db96d56Sopenharmony_ci   invocation of :c:func:`Py_ReprEnter` that returns zero.
8427db96d56Sopenharmony_ci
8437db96d56Sopenharmony_ci
8447db96d56Sopenharmony_ci.. _standardexceptions:
8457db96d56Sopenharmony_ci
8467db96d56Sopenharmony_ciStandard Exceptions
8477db96d56Sopenharmony_ci===================
8487db96d56Sopenharmony_ci
8497db96d56Sopenharmony_ciAll standard Python exceptions are available as global variables whose names are
8507db96d56Sopenharmony_ci``PyExc_`` followed by the Python exception name.  These have the type
8517db96d56Sopenharmony_ci:c:expr:`PyObject*`; they are all class objects.  For completeness, here are all
8527db96d56Sopenharmony_cithe variables:
8537db96d56Sopenharmony_ci
8547db96d56Sopenharmony_ci.. index::
8557db96d56Sopenharmony_ci   single: PyExc_BaseException
8567db96d56Sopenharmony_ci   single: PyExc_Exception
8577db96d56Sopenharmony_ci   single: PyExc_ArithmeticError
8587db96d56Sopenharmony_ci   single: PyExc_AssertionError
8597db96d56Sopenharmony_ci   single: PyExc_AttributeError
8607db96d56Sopenharmony_ci   single: PyExc_BlockingIOError
8617db96d56Sopenharmony_ci   single: PyExc_BrokenPipeError
8627db96d56Sopenharmony_ci   single: PyExc_BufferError
8637db96d56Sopenharmony_ci   single: PyExc_ChildProcessError
8647db96d56Sopenharmony_ci   single: PyExc_ConnectionAbortedError
8657db96d56Sopenharmony_ci   single: PyExc_ConnectionError
8667db96d56Sopenharmony_ci   single: PyExc_ConnectionRefusedError
8677db96d56Sopenharmony_ci   single: PyExc_ConnectionResetError
8687db96d56Sopenharmony_ci   single: PyExc_EOFError
8697db96d56Sopenharmony_ci   single: PyExc_FileExistsError
8707db96d56Sopenharmony_ci   single: PyExc_FileNotFoundError
8717db96d56Sopenharmony_ci   single: PyExc_FloatingPointError
8727db96d56Sopenharmony_ci   single: PyExc_GeneratorExit
8737db96d56Sopenharmony_ci   single: PyExc_ImportError
8747db96d56Sopenharmony_ci   single: PyExc_IndentationError
8757db96d56Sopenharmony_ci   single: PyExc_IndexError
8767db96d56Sopenharmony_ci   single: PyExc_InterruptedError
8777db96d56Sopenharmony_ci   single: PyExc_IsADirectoryError
8787db96d56Sopenharmony_ci   single: PyExc_KeyError
8797db96d56Sopenharmony_ci   single: PyExc_KeyboardInterrupt
8807db96d56Sopenharmony_ci   single: PyExc_LookupError
8817db96d56Sopenharmony_ci   single: PyExc_MemoryError
8827db96d56Sopenharmony_ci   single: PyExc_ModuleNotFoundError
8837db96d56Sopenharmony_ci   single: PyExc_NameError
8847db96d56Sopenharmony_ci   single: PyExc_NotADirectoryError
8857db96d56Sopenharmony_ci   single: PyExc_NotImplementedError
8867db96d56Sopenharmony_ci   single: PyExc_OSError
8877db96d56Sopenharmony_ci   single: PyExc_OverflowError
8887db96d56Sopenharmony_ci   single: PyExc_PermissionError
8897db96d56Sopenharmony_ci   single: PyExc_ProcessLookupError
8907db96d56Sopenharmony_ci   single: PyExc_RecursionError
8917db96d56Sopenharmony_ci   single: PyExc_ReferenceError
8927db96d56Sopenharmony_ci   single: PyExc_RuntimeError
8937db96d56Sopenharmony_ci   single: PyExc_StopAsyncIteration
8947db96d56Sopenharmony_ci   single: PyExc_StopIteration
8957db96d56Sopenharmony_ci   single: PyExc_SyntaxError
8967db96d56Sopenharmony_ci   single: PyExc_SystemError
8977db96d56Sopenharmony_ci   single: PyExc_SystemExit
8987db96d56Sopenharmony_ci   single: PyExc_TabError
8997db96d56Sopenharmony_ci   single: PyExc_TimeoutError
9007db96d56Sopenharmony_ci   single: PyExc_TypeError
9017db96d56Sopenharmony_ci   single: PyExc_UnboundLocalError
9027db96d56Sopenharmony_ci   single: PyExc_UnicodeDecodeError
9037db96d56Sopenharmony_ci   single: PyExc_UnicodeEncodeError
9047db96d56Sopenharmony_ci   single: PyExc_UnicodeError
9057db96d56Sopenharmony_ci   single: PyExc_UnicodeTranslateError
9067db96d56Sopenharmony_ci   single: PyExc_ValueError
9077db96d56Sopenharmony_ci   single: PyExc_ZeroDivisionError
9087db96d56Sopenharmony_ci
9097db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9107db96d56Sopenharmony_ci| C Name                                  | Python Name                     | Notes    |
9117db96d56Sopenharmony_ci+=========================================+=================================+==========+
9127db96d56Sopenharmony_ci| :c:data:`PyExc_BaseException`           | :exc:`BaseException`            | [1]_     |
9137db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9147db96d56Sopenharmony_ci| :c:data:`PyExc_Exception`               | :exc:`Exception`                | [1]_     |
9157db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9167db96d56Sopenharmony_ci| :c:data:`PyExc_ArithmeticError`         | :exc:`ArithmeticError`          | [1]_     |
9177db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9187db96d56Sopenharmony_ci| :c:data:`PyExc_AssertionError`          | :exc:`AssertionError`           |          |
9197db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9207db96d56Sopenharmony_ci| :c:data:`PyExc_AttributeError`          | :exc:`AttributeError`           |          |
9217db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9227db96d56Sopenharmony_ci| :c:data:`PyExc_BlockingIOError`         | :exc:`BlockingIOError`          |          |
9237db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9247db96d56Sopenharmony_ci| :c:data:`PyExc_BrokenPipeError`         | :exc:`BrokenPipeError`          |          |
9257db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9267db96d56Sopenharmony_ci| :c:data:`PyExc_BufferError`             | :exc:`BufferError`              |          |
9277db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9287db96d56Sopenharmony_ci| :c:data:`PyExc_ChildProcessError`       | :exc:`ChildProcessError`        |          |
9297db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9307db96d56Sopenharmony_ci| :c:data:`PyExc_ConnectionAbortedError`  | :exc:`ConnectionAbortedError`   |          |
9317db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9327db96d56Sopenharmony_ci| :c:data:`PyExc_ConnectionError`         | :exc:`ConnectionError`          |          |
9337db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9347db96d56Sopenharmony_ci| :c:data:`PyExc_ConnectionRefusedError`  | :exc:`ConnectionRefusedError`   |          |
9357db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9367db96d56Sopenharmony_ci| :c:data:`PyExc_ConnectionResetError`    | :exc:`ConnectionResetError`     |          |
9377db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9387db96d56Sopenharmony_ci| :c:data:`PyExc_EOFError`                | :exc:`EOFError`                 |          |
9397db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9407db96d56Sopenharmony_ci| :c:data:`PyExc_FileExistsError`         | :exc:`FileExistsError`          |          |
9417db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9427db96d56Sopenharmony_ci| :c:data:`PyExc_FileNotFoundError`       | :exc:`FileNotFoundError`        |          |
9437db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9447db96d56Sopenharmony_ci| :c:data:`PyExc_FloatingPointError`      | :exc:`FloatingPointError`       |          |
9457db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9467db96d56Sopenharmony_ci| :c:data:`PyExc_GeneratorExit`           | :exc:`GeneratorExit`            |          |
9477db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9487db96d56Sopenharmony_ci| :c:data:`PyExc_ImportError`             | :exc:`ImportError`              |          |
9497db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9507db96d56Sopenharmony_ci| :c:data:`PyExc_IndentationError`        | :exc:`IndentationError`         |          |
9517db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9527db96d56Sopenharmony_ci| :c:data:`PyExc_IndexError`              | :exc:`IndexError`               |          |
9537db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9547db96d56Sopenharmony_ci| :c:data:`PyExc_InterruptedError`        | :exc:`InterruptedError`         |          |
9557db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9567db96d56Sopenharmony_ci| :c:data:`PyExc_IsADirectoryError`       | :exc:`IsADirectoryError`        |          |
9577db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9587db96d56Sopenharmony_ci| :c:data:`PyExc_KeyError`                | :exc:`KeyError`                 |          |
9597db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9607db96d56Sopenharmony_ci| :c:data:`PyExc_KeyboardInterrupt`       | :exc:`KeyboardInterrupt`        |          |
9617db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9627db96d56Sopenharmony_ci| :c:data:`PyExc_LookupError`             | :exc:`LookupError`              | [1]_     |
9637db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9647db96d56Sopenharmony_ci| :c:data:`PyExc_MemoryError`             | :exc:`MemoryError`              |          |
9657db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9667db96d56Sopenharmony_ci| :c:data:`PyExc_ModuleNotFoundError`     | :exc:`ModuleNotFoundError`      |          |
9677db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9687db96d56Sopenharmony_ci| :c:data:`PyExc_NameError`               | :exc:`NameError`                |          |
9697db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9707db96d56Sopenharmony_ci| :c:data:`PyExc_NotADirectoryError`      | :exc:`NotADirectoryError`       |          |
9717db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9727db96d56Sopenharmony_ci| :c:data:`PyExc_NotImplementedError`     | :exc:`NotImplementedError`      |          |
9737db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9747db96d56Sopenharmony_ci| :c:data:`PyExc_OSError`                 | :exc:`OSError`                  | [1]_     |
9757db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9767db96d56Sopenharmony_ci| :c:data:`PyExc_OverflowError`           | :exc:`OverflowError`            |          |
9777db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9787db96d56Sopenharmony_ci| :c:data:`PyExc_PermissionError`         | :exc:`PermissionError`          |          |
9797db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9807db96d56Sopenharmony_ci| :c:data:`PyExc_ProcessLookupError`      | :exc:`ProcessLookupError`       |          |
9817db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9827db96d56Sopenharmony_ci| :c:data:`PyExc_RecursionError`          | :exc:`RecursionError`           |          |
9837db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9847db96d56Sopenharmony_ci| :c:data:`PyExc_ReferenceError`          | :exc:`ReferenceError`           |          |
9857db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9867db96d56Sopenharmony_ci| :c:data:`PyExc_RuntimeError`            | :exc:`RuntimeError`             |          |
9877db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9887db96d56Sopenharmony_ci| :c:data:`PyExc_StopAsyncIteration`      | :exc:`StopAsyncIteration`       |          |
9897db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9907db96d56Sopenharmony_ci| :c:data:`PyExc_StopIteration`           | :exc:`StopIteration`            |          |
9917db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9927db96d56Sopenharmony_ci| :c:data:`PyExc_SyntaxError`             | :exc:`SyntaxError`              |          |
9937db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9947db96d56Sopenharmony_ci| :c:data:`PyExc_SystemError`             | :exc:`SystemError`              |          |
9957db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9967db96d56Sopenharmony_ci| :c:data:`PyExc_SystemExit`              | :exc:`SystemExit`               |          |
9977db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
9987db96d56Sopenharmony_ci| :c:data:`PyExc_TabError`                | :exc:`TabError`                 |          |
9997db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
10007db96d56Sopenharmony_ci| :c:data:`PyExc_TimeoutError`            | :exc:`TimeoutError`             |          |
10017db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
10027db96d56Sopenharmony_ci| :c:data:`PyExc_TypeError`               | :exc:`TypeError`                |          |
10037db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
10047db96d56Sopenharmony_ci| :c:data:`PyExc_UnboundLocalError`       | :exc:`UnboundLocalError`        |          |
10057db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
10067db96d56Sopenharmony_ci| :c:data:`PyExc_UnicodeDecodeError`      | :exc:`UnicodeDecodeError`       |          |
10077db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
10087db96d56Sopenharmony_ci| :c:data:`PyExc_UnicodeEncodeError`      | :exc:`UnicodeEncodeError`       |          |
10097db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
10107db96d56Sopenharmony_ci| :c:data:`PyExc_UnicodeError`            | :exc:`UnicodeError`             |          |
10117db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
10127db96d56Sopenharmony_ci| :c:data:`PyExc_UnicodeTranslateError`   | :exc:`UnicodeTranslateError`    |          |
10137db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
10147db96d56Sopenharmony_ci| :c:data:`PyExc_ValueError`              | :exc:`ValueError`               |          |
10157db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
10167db96d56Sopenharmony_ci| :c:data:`PyExc_ZeroDivisionError`       | :exc:`ZeroDivisionError`        |          |
10177db96d56Sopenharmony_ci+-----------------------------------------+---------------------------------+----------+
10187db96d56Sopenharmony_ci
10197db96d56Sopenharmony_ci.. versionadded:: 3.3
10207db96d56Sopenharmony_ci   :c:data:`PyExc_BlockingIOError`, :c:data:`PyExc_BrokenPipeError`,
10217db96d56Sopenharmony_ci   :c:data:`PyExc_ChildProcessError`, :c:data:`PyExc_ConnectionError`,
10227db96d56Sopenharmony_ci   :c:data:`PyExc_ConnectionAbortedError`, :c:data:`PyExc_ConnectionRefusedError`,
10237db96d56Sopenharmony_ci   :c:data:`PyExc_ConnectionResetError`, :c:data:`PyExc_FileExistsError`,
10247db96d56Sopenharmony_ci   :c:data:`PyExc_FileNotFoundError`, :c:data:`PyExc_InterruptedError`,
10257db96d56Sopenharmony_ci   :c:data:`PyExc_IsADirectoryError`, :c:data:`PyExc_NotADirectoryError`,
10267db96d56Sopenharmony_ci   :c:data:`PyExc_PermissionError`, :c:data:`PyExc_ProcessLookupError`
10277db96d56Sopenharmony_ci   and :c:data:`PyExc_TimeoutError` were introduced following :pep:`3151`.
10287db96d56Sopenharmony_ci
10297db96d56Sopenharmony_ci.. versionadded:: 3.5
10307db96d56Sopenharmony_ci   :c:data:`PyExc_StopAsyncIteration` and :c:data:`PyExc_RecursionError`.
10317db96d56Sopenharmony_ci
10327db96d56Sopenharmony_ci.. versionadded:: 3.6
10337db96d56Sopenharmony_ci   :c:data:`PyExc_ModuleNotFoundError`.
10347db96d56Sopenharmony_ci
10357db96d56Sopenharmony_ciThese are compatibility aliases to :c:data:`PyExc_OSError`:
10367db96d56Sopenharmony_ci
10377db96d56Sopenharmony_ci.. index::
10387db96d56Sopenharmony_ci   single: PyExc_EnvironmentError
10397db96d56Sopenharmony_ci   single: PyExc_IOError
10407db96d56Sopenharmony_ci   single: PyExc_WindowsError
10417db96d56Sopenharmony_ci
10427db96d56Sopenharmony_ci+-------------------------------------+----------+
10437db96d56Sopenharmony_ci| C Name                              | Notes    |
10447db96d56Sopenharmony_ci+=====================================+==========+
10457db96d56Sopenharmony_ci| :c:data:`PyExc_EnvironmentError`    |          |
10467db96d56Sopenharmony_ci+-------------------------------------+----------+
10477db96d56Sopenharmony_ci| :c:data:`PyExc_IOError`             |          |
10487db96d56Sopenharmony_ci+-------------------------------------+----------+
10497db96d56Sopenharmony_ci| :c:data:`PyExc_WindowsError`        | [2]_     |
10507db96d56Sopenharmony_ci+-------------------------------------+----------+
10517db96d56Sopenharmony_ci
10527db96d56Sopenharmony_ci.. versionchanged:: 3.3
10537db96d56Sopenharmony_ci   These aliases used to be separate exception types.
10547db96d56Sopenharmony_ci
10557db96d56Sopenharmony_ciNotes:
10567db96d56Sopenharmony_ci
10577db96d56Sopenharmony_ci.. [1]
10587db96d56Sopenharmony_ci   This is a base class for other standard exceptions.
10597db96d56Sopenharmony_ci
10607db96d56Sopenharmony_ci.. [2]
10617db96d56Sopenharmony_ci   Only defined on Windows; protect code that uses this by testing that the
10627db96d56Sopenharmony_ci   preprocessor macro ``MS_WINDOWS`` is defined.
10637db96d56Sopenharmony_ci
10647db96d56Sopenharmony_ci.. _standardwarningcategories:
10657db96d56Sopenharmony_ci
10667db96d56Sopenharmony_ciStandard Warning Categories
10677db96d56Sopenharmony_ci===========================
10687db96d56Sopenharmony_ci
10697db96d56Sopenharmony_ciAll standard Python warning categories are available as global variables whose
10707db96d56Sopenharmony_cinames are ``PyExc_`` followed by the Python exception name. These have the type
10717db96d56Sopenharmony_ci:c:expr:`PyObject*`; they are all class objects. For completeness, here are all
10727db96d56Sopenharmony_cithe variables:
10737db96d56Sopenharmony_ci
10747db96d56Sopenharmony_ci.. index::
10757db96d56Sopenharmony_ci   single: PyExc_Warning
10767db96d56Sopenharmony_ci   single: PyExc_BytesWarning
10777db96d56Sopenharmony_ci   single: PyExc_DeprecationWarning
10787db96d56Sopenharmony_ci   single: PyExc_FutureWarning
10797db96d56Sopenharmony_ci   single: PyExc_ImportWarning
10807db96d56Sopenharmony_ci   single: PyExc_PendingDeprecationWarning
10817db96d56Sopenharmony_ci   single: PyExc_ResourceWarning
10827db96d56Sopenharmony_ci   single: PyExc_RuntimeWarning
10837db96d56Sopenharmony_ci   single: PyExc_SyntaxWarning
10847db96d56Sopenharmony_ci   single: PyExc_UnicodeWarning
10857db96d56Sopenharmony_ci   single: PyExc_UserWarning
10867db96d56Sopenharmony_ci
10877db96d56Sopenharmony_ci+------------------------------------------+---------------------------------+----------+
10887db96d56Sopenharmony_ci| C Name                                   | Python Name                     | Notes    |
10897db96d56Sopenharmony_ci+==========================================+=================================+==========+
10907db96d56Sopenharmony_ci| :c:data:`PyExc_Warning`                  | :exc:`Warning`                  | [3]_     |
10917db96d56Sopenharmony_ci+------------------------------------------+---------------------------------+----------+
10927db96d56Sopenharmony_ci| :c:data:`PyExc_BytesWarning`             | :exc:`BytesWarning`             |          |
10937db96d56Sopenharmony_ci+------------------------------------------+---------------------------------+----------+
10947db96d56Sopenharmony_ci| :c:data:`PyExc_DeprecationWarning`       | :exc:`DeprecationWarning`       |          |
10957db96d56Sopenharmony_ci+------------------------------------------+---------------------------------+----------+
10967db96d56Sopenharmony_ci| :c:data:`PyExc_FutureWarning`            | :exc:`FutureWarning`            |          |
10977db96d56Sopenharmony_ci+------------------------------------------+---------------------------------+----------+
10987db96d56Sopenharmony_ci| :c:data:`PyExc_ImportWarning`            | :exc:`ImportWarning`            |          |
10997db96d56Sopenharmony_ci+------------------------------------------+---------------------------------+----------+
11007db96d56Sopenharmony_ci| :c:data:`PyExc_PendingDeprecationWarning`| :exc:`PendingDeprecationWarning`|          |
11017db96d56Sopenharmony_ci+------------------------------------------+---------------------------------+----------+
11027db96d56Sopenharmony_ci| :c:data:`PyExc_ResourceWarning`          | :exc:`ResourceWarning`          |          |
11037db96d56Sopenharmony_ci+------------------------------------------+---------------------------------+----------+
11047db96d56Sopenharmony_ci| :c:data:`PyExc_RuntimeWarning`           | :exc:`RuntimeWarning`           |          |
11057db96d56Sopenharmony_ci+------------------------------------------+---------------------------------+----------+
11067db96d56Sopenharmony_ci| :c:data:`PyExc_SyntaxWarning`            | :exc:`SyntaxWarning`            |          |
11077db96d56Sopenharmony_ci+------------------------------------------+---------------------------------+----------+
11087db96d56Sopenharmony_ci| :c:data:`PyExc_UnicodeWarning`           | :exc:`UnicodeWarning`           |          |
11097db96d56Sopenharmony_ci+------------------------------------------+---------------------------------+----------+
11107db96d56Sopenharmony_ci| :c:data:`PyExc_UserWarning`              | :exc:`UserWarning`              |          |
11117db96d56Sopenharmony_ci+------------------------------------------+---------------------------------+----------+
11127db96d56Sopenharmony_ci
11137db96d56Sopenharmony_ci.. versionadded:: 3.2
11147db96d56Sopenharmony_ci   :c:data:`PyExc_ResourceWarning`.
11157db96d56Sopenharmony_ci
11167db96d56Sopenharmony_ciNotes:
11177db96d56Sopenharmony_ci
11187db96d56Sopenharmony_ci.. [3]
11197db96d56Sopenharmony_ci   This is a base class for other standard warning categories.
1120