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