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 *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 *filename; 21 PyObject *lineno; 22 PyObject *offset; 23 PyObject *end_lineno; 24 PyObject *end_offset; 25 PyObject *text; 26 PyObject *print_file_and_line; 27 } PySyntaxErrorObject; 28 29 typedef struct { 30 PyException_HEAD 31 PyObject *msg; 32 PyObject *name; 33 PyObject *path; 34 } PyImportErrorObject; 35 36 typedef struct { 37 PyException_HEAD 38 PyObject *encoding; 39 PyObject *object; 40 Py_ssize_t start; 41 Py_ssize_t end; 42 PyObject *reason; 43 } PyUnicodeErrorObject; 44 45 typedef struct { 46 PyException_HEAD 47 PyObject *code; 48 } PySystemExitObject; 49 50 typedef struct { 51 PyException_HEAD 52 PyObject *myerrno; 53 PyObject *strerror; 54 PyObject *filename; 55 PyObject *filename2; 56 #ifdef MS_WINDOWS 57 PyObject *winerror; 58 #endif 59 Py_ssize_t written; /* only for BlockingIOError, -1 otherwise */ 60 } PyOSErrorObject; 61 62 typedef struct { 63 PyException_HEAD 64 PyObject *value; 65 } PyStopIterationObject; 66 67 typedef struct { 68 PyException_HEAD 69 PyObject *name; 70 } PyNameErrorObject; 71 72 typedef struct { 73 PyException_HEAD 74 PyObject *obj; 75 PyObject *name; 76 } PyAttributeErrorObject; 77 78 /* Compatibility typedefs */ 79 typedef PyOSErrorObject PyEnvironmentErrorObject; 80 #ifdef MS_WINDOWS 81 typedef PyOSErrorObject PyWindowsErrorObject; 82 #endif 83 84 /* Error handling definitions */ 85 86 PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *); 87 PyAPI_FUNC(_PyErr_StackItem*) _PyErr_GetTopmostException(PyThreadState *tstate); 88 PyAPI_FUNC(void) _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, PyObject **); 89 90 /* Context manipulation (PEP 3134) */ 91 92 PyAPI_FUNC(void) _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *); 93 94 /* Convenience functions */ 95 96 #ifdef MS_WINDOWS 97 Py_DEPRECATED(3.3) 98 PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilename( 99 PyObject *, const Py_UNICODE *); 100 #endif /* MS_WINDOWS */ 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 #ifdef MS_WINDOWS 112 /* XXX redeclare to use WSTRING */ 113 Py_DEPRECATED(3.3) 114 PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename( 115 int, const Py_UNICODE *); 116 Py_DEPRECATED(3.3) 117 PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename( 118 PyObject *,int, const Py_UNICODE *); 119 #endif 120 121 /* In exceptions.c */ 122 123 /* Helper that attempts to replace the current exception with one of the 124 * same type but with a prefix added to the exception text. The resulting 125 * exception description looks like: 126 * 127 * prefix (exc_type: original_exc_str) 128 * 129 * Only some exceptions can be safely replaced. If the function determines 130 * it isn't safe to perform the replacement, it will leave the original 131 * unmodified exception in place. 132 * 133 * Returns a borrowed reference to the new exception (if any), NULL if the 134 * existing exception was left in place. 135 */ 136 PyAPI_FUNC(PyObject *) _PyErr_TrySetFromCause( 137 const char *prefix_format, /* ASCII-encoded string */ 138 ... 139 ); 140 141 /* In signalmodule.c */ 142 143 int PySignal_SetWakeupFd(int fd); 144 PyAPI_FUNC(int) _PyErr_CheckSignals(void); 145 146 /* Support for adding program text to SyntaxErrors */ 147 148 PyAPI_FUNC(void) PyErr_SyntaxLocationObject( 149 PyObject *filename, 150 int lineno, 151 int col_offset); 152 153 PyAPI_FUNC(void) PyErr_RangedSyntaxLocationObject( 154 PyObject *filename, 155 int lineno, 156 int col_offset, 157 int end_lineno, 158 int end_col_offset); 159 160 PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject( 161 PyObject *filename, 162 int lineno); 163 164 /* Create a UnicodeEncodeError object. 165 * 166 * TODO: This API will be removed in Python 3.11. 167 */ 168 Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create( 169 const char *encoding, /* UTF-8 encoded string */ 170 const Py_UNICODE *object, 171 Py_ssize_t length, 172 Py_ssize_t start, 173 Py_ssize_t end, 174 const char *reason /* UTF-8 encoded string */ 175 ); 176 177 /* Create a UnicodeTranslateError object. 178 * 179 * TODO: This API will be removed in Python 3.11. 180 */ 181 Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create( 182 const Py_UNICODE *object, 183 Py_ssize_t length, 184 Py_ssize_t start, 185 Py_ssize_t end, 186 const char *reason /* UTF-8 encoded string */ 187 ); 188 189 PyAPI_FUNC(PyObject *) _PyErr_ProgramDecodedTextObject( 190 PyObject *filename, 191 int lineno, 192 const char* encoding); 193 194 PyAPI_FUNC(PyObject *) _PyUnicodeTranslateError_Create( 195 PyObject *object, 196 Py_ssize_t start, 197 Py_ssize_t end, 198 const char *reason /* UTF-8 encoded string */ 199 ); 200 201 PyAPI_FUNC(void) _PyErr_WriteUnraisableMsg( 202 const char *err_msg, 203 PyObject *obj); 204 205 PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFunc( 206 const char *func, 207 const char *message); 208 209 PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFormat( 210 const char *func, 211 const char *format, 212 ...); 213 214 #define Py_FatalError(message) _Py_FatalErrorFunc(__func__, message) 215