(root)/
Python-3.12.0/
Include/
pyerrors.h
       1  #ifndef Py_ERRORS_H
       2  #define Py_ERRORS_H
       3  #ifdef __cplusplus
       4  extern "C" {
       5  #endif
       6  
       7  #include <stdarg.h>               // va_list
       8  
       9  /* Error handling definitions */
      10  
      11  PyAPI_FUNC(void) PyErr_SetNone(PyObject *);
      12  PyAPI_FUNC(void) PyErr_SetObject(PyObject *, PyObject *);
      13  PyAPI_FUNC(void) PyErr_SetString(
      14      PyObject *exception,
      15      const char *string   /* decoded from utf-8 */
      16      );
      17  PyAPI_FUNC(PyObject *) PyErr_Occurred(void);
      18  PyAPI_FUNC(void) PyErr_Clear(void);
      19  PyAPI_FUNC(void) PyErr_Fetch(PyObject **, PyObject **, PyObject **);
      20  PyAPI_FUNC(void) PyErr_Restore(PyObject *, PyObject *, PyObject *);
      21  PyAPI_FUNC(PyObject *) PyErr_GetRaisedException(void);
      22  PyAPI_FUNC(void) PyErr_SetRaisedException(PyObject *);
      23  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030b0000
      24  PyAPI_FUNC(PyObject*) PyErr_GetHandledException(void);
      25  PyAPI_FUNC(void) PyErr_SetHandledException(PyObject *);
      26  #endif
      27  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
      28  PyAPI_FUNC(void) PyErr_GetExcInfo(PyObject **, PyObject **, PyObject **);
      29  PyAPI_FUNC(void) PyErr_SetExcInfo(PyObject *, PyObject *, PyObject *);
      30  #endif
      31  
      32  /* Defined in Python/pylifecycle.c
      33  
      34     The Py_FatalError() function is replaced with a macro which logs
      35     automatically the name of the current function, unless the Py_LIMITED_API
      36     macro is defined. */
      37  PyAPI_FUNC(void) _Py_NO_RETURN Py_FatalError(const char *message);
      38  
      39  /* Error testing and normalization */
      40  PyAPI_FUNC(int) PyErr_GivenExceptionMatches(PyObject *, PyObject *);
      41  PyAPI_FUNC(int) PyErr_ExceptionMatches(PyObject *);
      42  PyAPI_FUNC(void) PyErr_NormalizeException(PyObject**, PyObject**, PyObject**);
      43  
      44  /* Traceback manipulation (PEP 3134) */
      45  PyAPI_FUNC(int) PyException_SetTraceback(PyObject *, PyObject *);
      46  PyAPI_FUNC(PyObject *) PyException_GetTraceback(PyObject *);
      47  
      48  /* Cause manipulation (PEP 3134) */
      49  PyAPI_FUNC(PyObject *) PyException_GetCause(PyObject *);
      50  PyAPI_FUNC(void) PyException_SetCause(PyObject *, PyObject *);
      51  
      52  /* Context manipulation (PEP 3134) */
      53  PyAPI_FUNC(PyObject *) PyException_GetContext(PyObject *);
      54  PyAPI_FUNC(void) PyException_SetContext(PyObject *, PyObject *);
      55  
      56  
      57  PyAPI_FUNC(PyObject *) PyException_GetArgs(PyObject *);
      58  PyAPI_FUNC(void) PyException_SetArgs(PyObject *, PyObject *);
      59  
      60  /* */
      61  
      62  #define PyExceptionClass_Check(x)                                       \
      63      (PyType_Check((x)) &&                                               \
      64       PyType_FastSubclass((PyTypeObject*)(x), Py_TPFLAGS_BASE_EXC_SUBCLASS))
      65  
      66  #define PyExceptionInstance_Check(x)                    \
      67      PyType_FastSubclass(Py_TYPE(x), Py_TPFLAGS_BASE_EXC_SUBCLASS)
      68  
      69  PyAPI_FUNC(const char *) PyExceptionClass_Name(PyObject *);
      70  
      71  #define PyExceptionInstance_Class(x) _PyObject_CAST(Py_TYPE(x))
      72  
      73  #define _PyBaseExceptionGroup_Check(x)                   \
      74      PyObject_TypeCheck((x), (PyTypeObject *)PyExc_BaseExceptionGroup)
      75  
      76  /* Predefined exceptions */
      77  
      78  PyAPI_DATA(PyObject *) PyExc_BaseException;
      79  PyAPI_DATA(PyObject *) PyExc_Exception;
      80  PyAPI_DATA(PyObject *) PyExc_BaseExceptionGroup;
      81  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
      82  PyAPI_DATA(PyObject *) PyExc_StopAsyncIteration;
      83  #endif
      84  PyAPI_DATA(PyObject *) PyExc_StopIteration;
      85  PyAPI_DATA(PyObject *) PyExc_GeneratorExit;
      86  PyAPI_DATA(PyObject *) PyExc_ArithmeticError;
      87  PyAPI_DATA(PyObject *) PyExc_LookupError;
      88  
      89  PyAPI_DATA(PyObject *) PyExc_AssertionError;
      90  PyAPI_DATA(PyObject *) PyExc_AttributeError;
      91  PyAPI_DATA(PyObject *) PyExc_BufferError;
      92  PyAPI_DATA(PyObject *) PyExc_EOFError;
      93  PyAPI_DATA(PyObject *) PyExc_FloatingPointError;
      94  PyAPI_DATA(PyObject *) PyExc_OSError;
      95  PyAPI_DATA(PyObject *) PyExc_ImportError;
      96  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
      97  PyAPI_DATA(PyObject *) PyExc_ModuleNotFoundError;
      98  #endif
      99  PyAPI_DATA(PyObject *) PyExc_IndexError;
     100  PyAPI_DATA(PyObject *) PyExc_KeyError;
     101  PyAPI_DATA(PyObject *) PyExc_KeyboardInterrupt;
     102  PyAPI_DATA(PyObject *) PyExc_MemoryError;
     103  PyAPI_DATA(PyObject *) PyExc_NameError;
     104  PyAPI_DATA(PyObject *) PyExc_OverflowError;
     105  PyAPI_DATA(PyObject *) PyExc_RuntimeError;
     106  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
     107  PyAPI_DATA(PyObject *) PyExc_RecursionError;
     108  #endif
     109  PyAPI_DATA(PyObject *) PyExc_NotImplementedError;
     110  PyAPI_DATA(PyObject *) PyExc_SyntaxError;
     111  PyAPI_DATA(PyObject *) PyExc_IndentationError;
     112  PyAPI_DATA(PyObject *) PyExc_TabError;
     113  PyAPI_DATA(PyObject *) PyExc_ReferenceError;
     114  PyAPI_DATA(PyObject *) PyExc_SystemError;
     115  PyAPI_DATA(PyObject *) PyExc_SystemExit;
     116  PyAPI_DATA(PyObject *) PyExc_TypeError;
     117  PyAPI_DATA(PyObject *) PyExc_UnboundLocalError;
     118  PyAPI_DATA(PyObject *) PyExc_UnicodeError;
     119  PyAPI_DATA(PyObject *) PyExc_UnicodeEncodeError;
     120  PyAPI_DATA(PyObject *) PyExc_UnicodeDecodeError;
     121  PyAPI_DATA(PyObject *) PyExc_UnicodeTranslateError;
     122  PyAPI_DATA(PyObject *) PyExc_ValueError;
     123  PyAPI_DATA(PyObject *) PyExc_ZeroDivisionError;
     124  
     125  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
     126  PyAPI_DATA(PyObject *) PyExc_BlockingIOError;
     127  PyAPI_DATA(PyObject *) PyExc_BrokenPipeError;
     128  PyAPI_DATA(PyObject *) PyExc_ChildProcessError;
     129  PyAPI_DATA(PyObject *) PyExc_ConnectionError;
     130  PyAPI_DATA(PyObject *) PyExc_ConnectionAbortedError;
     131  PyAPI_DATA(PyObject *) PyExc_ConnectionRefusedError;
     132  PyAPI_DATA(PyObject *) PyExc_ConnectionResetError;
     133  PyAPI_DATA(PyObject *) PyExc_FileExistsError;
     134  PyAPI_DATA(PyObject *) PyExc_FileNotFoundError;
     135  PyAPI_DATA(PyObject *) PyExc_InterruptedError;
     136  PyAPI_DATA(PyObject *) PyExc_IsADirectoryError;
     137  PyAPI_DATA(PyObject *) PyExc_NotADirectoryError;
     138  PyAPI_DATA(PyObject *) PyExc_PermissionError;
     139  PyAPI_DATA(PyObject *) PyExc_ProcessLookupError;
     140  PyAPI_DATA(PyObject *) PyExc_TimeoutError;
     141  #endif
     142  
     143  
     144  /* Compatibility aliases */
     145  PyAPI_DATA(PyObject *) PyExc_EnvironmentError;
     146  PyAPI_DATA(PyObject *) PyExc_IOError;
     147  #ifdef MS_WINDOWS
     148  PyAPI_DATA(PyObject *) PyExc_WindowsError;
     149  #endif
     150  
     151  /* Predefined warning categories */
     152  PyAPI_DATA(PyObject *) PyExc_Warning;
     153  PyAPI_DATA(PyObject *) PyExc_UserWarning;
     154  PyAPI_DATA(PyObject *) PyExc_DeprecationWarning;
     155  PyAPI_DATA(PyObject *) PyExc_PendingDeprecationWarning;
     156  PyAPI_DATA(PyObject *) PyExc_SyntaxWarning;
     157  PyAPI_DATA(PyObject *) PyExc_RuntimeWarning;
     158  PyAPI_DATA(PyObject *) PyExc_FutureWarning;
     159  PyAPI_DATA(PyObject *) PyExc_ImportWarning;
     160  PyAPI_DATA(PyObject *) PyExc_UnicodeWarning;
     161  PyAPI_DATA(PyObject *) PyExc_BytesWarning;
     162  PyAPI_DATA(PyObject *) PyExc_EncodingWarning;
     163  PyAPI_DATA(PyObject *) PyExc_ResourceWarning;
     164  
     165  
     166  /* Convenience functions */
     167  
     168  PyAPI_FUNC(int) PyErr_BadArgument(void);
     169  PyAPI_FUNC(PyObject *) PyErr_NoMemory(void);
     170  PyAPI_FUNC(PyObject *) PyErr_SetFromErrno(PyObject *);
     171  PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObject(
     172      PyObject *, PyObject *);
     173  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000
     174  PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilenameObjects(
     175      PyObject *, PyObject *, PyObject *);
     176  #endif
     177  PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithFilename(
     178      PyObject *exc,
     179      const char *filename   /* decoded from the filesystem encoding */
     180      );
     181  
     182  PyAPI_FUNC(PyObject *) PyErr_Format(
     183      PyObject *exception,
     184      const char *format,   /* ASCII-encoded string  */
     185      ...
     186      );
     187  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
     188  PyAPI_FUNC(PyObject *) PyErr_FormatV(
     189      PyObject *exception,
     190      const char *format,
     191      va_list vargs);
     192  #endif
     193  
     194  #ifdef MS_WINDOWS
     195  PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilename(
     196      int ierr,
     197      const char *filename        /* decoded from the filesystem encoding */
     198      );
     199  PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErr(int);
     200  PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObject(
     201      PyObject *,int, PyObject *);
     202  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000
     203  PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilenameObjects(
     204      PyObject *,int, PyObject *, PyObject *);
     205  #endif
     206  PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithFilename(
     207      PyObject *exc,
     208      int ierr,
     209      const char *filename        /* decoded from the filesystem encoding */
     210      );
     211  PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int);
     212  #endif /* MS_WINDOWS */
     213  
     214  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03060000
     215  PyAPI_FUNC(PyObject *) PyErr_SetImportErrorSubclass(PyObject *, PyObject *,
     216      PyObject *, PyObject *);
     217  #endif
     218  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
     219  PyAPI_FUNC(PyObject *) PyErr_SetImportError(PyObject *, PyObject *,
     220      PyObject *);
     221  #endif
     222  
     223  /* Export the old function so that the existing API remains available: */
     224  PyAPI_FUNC(void) PyErr_BadInternalCall(void);
     225  PyAPI_FUNC(void) _PyErr_BadInternalCall(const char *filename, int lineno);
     226  /* Mask the old API with a call to the new API for code compiled under
     227     Python 2.0: */
     228  #define PyErr_BadInternalCall() _PyErr_BadInternalCall(__FILE__, __LINE__)
     229  
     230  /* Function to create a new exception */
     231  PyAPI_FUNC(PyObject *) PyErr_NewException(
     232      const char *name, PyObject *base, PyObject *dict);
     233  PyAPI_FUNC(PyObject *) PyErr_NewExceptionWithDoc(
     234      const char *name, const char *doc, PyObject *base, PyObject *dict);
     235  PyAPI_FUNC(void) PyErr_WriteUnraisable(PyObject *);
     236  
     237  
     238  /* In signalmodule.c */
     239  PyAPI_FUNC(int) PyErr_CheckSignals(void);
     240  PyAPI_FUNC(void) PyErr_SetInterrupt(void);
     241  #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000
     242  PyAPI_FUNC(int) PyErr_SetInterruptEx(int signum);
     243  #endif
     244  
     245  /* Support for adding program text to SyntaxErrors */
     246  PyAPI_FUNC(void) PyErr_SyntaxLocation(
     247      const char *filename,       /* decoded from the filesystem encoding */
     248      int lineno);
     249  PyAPI_FUNC(void) PyErr_SyntaxLocationEx(
     250      const char *filename,       /* decoded from the filesystem encoding */
     251      int lineno,
     252      int col_offset);
     253  PyAPI_FUNC(PyObject *) PyErr_ProgramText(
     254      const char *filename,       /* decoded from the filesystem encoding */
     255      int lineno);
     256  
     257  /* The following functions are used to create and modify unicode
     258     exceptions from C */
     259  
     260  /* create a UnicodeDecodeError object */
     261  PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_Create(
     262      const char *encoding,       /* UTF-8 encoded string */
     263      const char *object,
     264      Py_ssize_t length,
     265      Py_ssize_t start,
     266      Py_ssize_t end,
     267      const char *reason          /* UTF-8 encoded string */
     268      );
     269  
     270  /* get the encoding attribute */
     271  PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetEncoding(PyObject *);
     272  PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetEncoding(PyObject *);
     273  
     274  /* get the object attribute */
     275  PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetObject(PyObject *);
     276  PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetObject(PyObject *);
     277  PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetObject(PyObject *);
     278  
     279  /* get the value of the start attribute (the int * may not be NULL)
     280     return 0 on success, -1 on failure */
     281  PyAPI_FUNC(int) PyUnicodeEncodeError_GetStart(PyObject *, Py_ssize_t *);
     282  PyAPI_FUNC(int) PyUnicodeDecodeError_GetStart(PyObject *, Py_ssize_t *);
     283  PyAPI_FUNC(int) PyUnicodeTranslateError_GetStart(PyObject *, Py_ssize_t *);
     284  
     285  /* assign a new value to the start attribute
     286     return 0 on success, -1 on failure */
     287  PyAPI_FUNC(int) PyUnicodeEncodeError_SetStart(PyObject *, Py_ssize_t);
     288  PyAPI_FUNC(int) PyUnicodeDecodeError_SetStart(PyObject *, Py_ssize_t);
     289  PyAPI_FUNC(int) PyUnicodeTranslateError_SetStart(PyObject *, Py_ssize_t);
     290  
     291  /* get the value of the end attribute (the int *may not be NULL)
     292   return 0 on success, -1 on failure */
     293  PyAPI_FUNC(int) PyUnicodeEncodeError_GetEnd(PyObject *, Py_ssize_t *);
     294  PyAPI_FUNC(int) PyUnicodeDecodeError_GetEnd(PyObject *, Py_ssize_t *);
     295  PyAPI_FUNC(int) PyUnicodeTranslateError_GetEnd(PyObject *, Py_ssize_t *);
     296  
     297  /* assign a new value to the end attribute
     298     return 0 on success, -1 on failure */
     299  PyAPI_FUNC(int) PyUnicodeEncodeError_SetEnd(PyObject *, Py_ssize_t);
     300  PyAPI_FUNC(int) PyUnicodeDecodeError_SetEnd(PyObject *, Py_ssize_t);
     301  PyAPI_FUNC(int) PyUnicodeTranslateError_SetEnd(PyObject *, Py_ssize_t);
     302  
     303  /* get the value of the reason attribute */
     304  PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_GetReason(PyObject *);
     305  PyAPI_FUNC(PyObject *) PyUnicodeDecodeError_GetReason(PyObject *);
     306  PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_GetReason(PyObject *);
     307  
     308  /* assign a new value to the reason attribute
     309     return 0 on success, -1 on failure */
     310  PyAPI_FUNC(int) PyUnicodeEncodeError_SetReason(
     311      PyObject *exc,
     312      const char *reason          /* UTF-8 encoded string */
     313      );
     314  PyAPI_FUNC(int) PyUnicodeDecodeError_SetReason(
     315      PyObject *exc,
     316      const char *reason          /* UTF-8 encoded string */
     317      );
     318  PyAPI_FUNC(int) PyUnicodeTranslateError_SetReason(
     319      PyObject *exc,
     320      const char *reason          /* UTF-8 encoded string */
     321      );
     322  
     323  PyAPI_FUNC(int) PyOS_snprintf(char *str, size_t size, const char  *format, ...)
     324                          Py_GCC_ATTRIBUTE((format(printf, 3, 4)));
     325  PyAPI_FUNC(int) PyOS_vsnprintf(char *str, size_t size, const char  *format, va_list va)
     326                          Py_GCC_ATTRIBUTE((format(printf, 3, 0)));
     327  
     328  #ifndef Py_LIMITED_API
     329  #  define Py_CPYTHON_ERRORS_H
     330  #  include "cpython/pyerrors.h"
     331  #  undef Py_CPYTHON_ERRORS_H
     332  #endif
     333  
     334  #ifdef __cplusplus
     335  }
     336  #endif
     337  #endif /* !Py_ERRORS_H */