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 | |