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