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
13typedef struct {
14 PyException_HEAD
15} PyBaseExceptionObject;
16
17typedef 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
29typedef struct {
30 PyException_HEAD
31 PyObject *msg;
32 PyObject *name;
33 PyObject *path;
34} PyImportErrorObject;
35
36typedef 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
45typedef struct {
46 PyException_HEAD
47 PyObject *code;
48} PySystemExitObject;
49
50typedef 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
62typedef struct {
63 PyException_HEAD
64 PyObject *value;
65} PyStopIterationObject;
66
67typedef struct {
68 PyException_HEAD
69 PyObject *name;
70} PyNameErrorObject;
71
72typedef struct {
73 PyException_HEAD
74 PyObject *obj;
75 PyObject *name;
76} PyAttributeErrorObject;
77
78/* Compatibility typedefs */
79typedef PyOSErrorObject PyEnvironmentErrorObject;
80#ifdef MS_WINDOWS
81typedef PyOSErrorObject PyWindowsErrorObject;
82#endif
83
84/* Error handling definitions */
85
86PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *);
87PyAPI_FUNC(_PyErr_StackItem*) _PyErr_GetTopmostException(PyThreadState *tstate);
88PyAPI_FUNC(void) _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, PyObject **);
89
90/* Context manipulation (PEP 3134) */
91
92PyAPI_FUNC(void) _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *);
93
94/* Convenience functions */
95
96#ifdef MS_WINDOWS
97Py_DEPRECATED(3.3)
98PyAPI_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 */
105PyAPI_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 */
113Py_DEPRECATED(3.3)
114PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename(
115 int, const Py_UNICODE *);
116Py_DEPRECATED(3.3)
117PyAPI_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 */
136PyAPI_FUNC(PyObject *) _PyErr_TrySetFromCause(
137 const char *prefix_format, /* ASCII-encoded string */
138 ...
139 );
140
141/* In signalmodule.c */
142
143int PySignal_SetWakeupFd(int fd);
144PyAPI_FUNC(int) _PyErr_CheckSignals(void);
145
146/* Support for adding program text to SyntaxErrors */
147
148PyAPI_FUNC(void) PyErr_SyntaxLocationObject(
149 PyObject *filename,
150 int lineno,
151 int col_offset);
152
153PyAPI_FUNC(void) PyErr_RangedSyntaxLocationObject(
154 PyObject *filename,
155 int lineno,
156 int col_offset,
157 int end_lineno,
158 int end_col_offset);
159
160PyAPI_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 */
168Py_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 */
181Py_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
189PyAPI_FUNC(PyObject *) _PyErr_ProgramDecodedTextObject(
190 PyObject *filename,
191 int lineno,
192 const char* encoding);
193
194PyAPI_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
201PyAPI_FUNC(void) _PyErr_WriteUnraisableMsg(
202 const char *err_msg,
203 PyObject *obj);
204
205PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFunc(
206 const char *func,
207 const char *message);
208
209PyAPI_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