1 #ifndef Py_CPYTHON_ERRORS_H 2 # error "this header file must not be included directly" 3 #endif 4 5 /* Error objects */ 6 7 /* PyException_HEAD defines the initial segment of every exception class. */ 8 #define PyException_HEAD PyObject_HEAD PyObject *dict;\ 9 PyObject *args; PyObject *notes; PyObject *traceback;\ 10 PyObject *context; PyObject *cause;\ 11 char suppress_context; 12 13 typedef struct { 14 PyException_HEAD 15 } PyBaseExceptionObject; 16 17 typedef struct { 18 PyException_HEAD 19 PyObject *msg; 20 PyObject *excs; 21 } PyBaseExceptionGroupObject; 22 23 typedef struct { 24 PyException_HEAD 25 PyObject *msg; 26 PyObject *filename; 27 PyObject *lineno; 28 PyObject *offset; 29 PyObject *end_lineno; 30 PyObject *end_offset; 31 PyObject *text; 32 PyObject *print_file_and_line; 33 } PySyntaxErrorObject; 34 35 typedef struct { 36 PyException_HEAD 37 PyObject *msg; 38 PyObject *name; 39 PyObject *path; 40 } PyImportErrorObject; 41 42 typedef struct { 43 PyException_HEAD 44 PyObject *encoding; 45 PyObject *object; 46 Py_ssize_t start; 47 Py_ssize_t end; 48 PyObject *reason; 49 } PyUnicodeErrorObject; 50 51 typedef struct { 52 PyException_HEAD 53 PyObject *code; 54 } PySystemExitObject; 55 56 typedef struct { 57 PyException_HEAD 58 PyObject *myerrno; 59 PyObject *strerror; 60 PyObject *filename; 61 PyObject *filename2; 62 #ifdef MS_WINDOWS 63 PyObject *winerror; 64 #endif 65 Py_ssize_t written; /* only for BlockingIOError, -1 otherwise */ 66 } PyOSErrorObject; 67 68 typedef struct { 69 PyException_HEAD 70 PyObject *value; 71 } PyStopIterationObject; 72 73 typedef struct { 74 PyException_HEAD 75 PyObject *name; 76 } PyNameErrorObject; 77 78 typedef struct { 79 PyException_HEAD 80 PyObject *obj; 81 PyObject *name; 82 } PyAttributeErrorObject; 83 84 /* Compatibility typedefs */ 85 typedef PyOSErrorObject PyEnvironmentErrorObject; 86 #ifdef MS_WINDOWS 87 typedef PyOSErrorObject PyWindowsErrorObject; 88 #endif 89 90 /* Error handling definitions */ 91 92 PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *); 93 PyAPI_FUNC(_PyErr_StackItem*) _PyErr_GetTopmostException(PyThreadState *tstate); 94 PyAPI_FUNC(PyObject*) _PyErr_GetHandledException(PyThreadState *); 95 PyAPI_FUNC(void) _PyErr_SetHandledException(PyThreadState *, PyObject *); 96 PyAPI_FUNC(void) _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, PyObject **); 97 98 /* Context manipulation (PEP 3134) */ 99 100 PyAPI_FUNC(void) _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *); 101 102 /* Like PyErr_Format(), but saves current exception as __context__ and 103 __cause__. 104 */ 105 PyAPI_FUNC(PyObject *) _PyErr_FormatFromCause( 106 PyObject *exception, 107 const char *format, /* ASCII-encoded string */ 108 ... 109 ); 110 111 /* In exceptions.c */ 112 113 /* Helper that attempts to replace the current exception with one of the 114 * same type but with a prefix added to the exception text. The resulting 115 * exception description looks like: 116 * 117 * prefix (exc_type: original_exc_str) 118 * 119 * Only some exceptions can be safely replaced. If the function determines 120 * it isn't safe to perform the replacement, it will leave the original 121 * unmodified exception in place. 122 * 123 * Returns a borrowed reference to the new exception (if any), NULL if the 124 * existing exception was left in place. 125 */ 126 PyAPI_FUNC(PyObject *) _PyErr_TrySetFromCause( 127 const char *prefix_format, /* ASCII-encoded string */ 128 ... 129 ); 130 131 /* In signalmodule.c */ 132 133 int PySignal_SetWakeupFd(int fd); 134 PyAPI_FUNC(int) _PyErr_CheckSignals(void); 135 136 /* Support for adding program text to SyntaxErrors */ 137 138 PyAPI_FUNC(void) PyErr_SyntaxLocationObject( 139 PyObject *filename, 140 int lineno, 141 int col_offset); 142 143 PyAPI_FUNC(void) PyErr_RangedSyntaxLocationObject( 144 PyObject *filename, 145 int lineno, 146 int col_offset, 147 int end_lineno, 148 int end_col_offset); 149 150 PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject( 151 PyObject *filename, 152 int lineno); 153 154 PyAPI_FUNC(PyObject *) _PyErr_ProgramDecodedTextObject( 155 PyObject *filename, 156 int lineno, 157 const char* encoding); 158 159 PyAPI_FUNC(PyObject *) _PyUnicodeTranslateError_Create( 160 PyObject *object, 161 Py_ssize_t start, 162 Py_ssize_t end, 163 const char *reason /* UTF-8 encoded string */ 164 ); 165 166 PyAPI_FUNC(void) _PyErr_WriteUnraisableMsg( 167 const char *err_msg, 168 PyObject *obj); 169 170 PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFunc( 171 const char *func, 172 const char *message); 173 174 PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFormat( 175 const char *func, 176 const char *format, 177 ...); 178 179 #define Py_FatalError(message) _Py_FatalErrorFunc(__func__, message) 180