blob: 9d88e6631f6643fc33d95acd49c887e91650772c [file] [log] [blame]
Victor Stinner5a8c2402018-11-26 22:11:25 +01001#ifndef Py_CPYTHON_ERRORS_H
2# error "this header file must not be included directly"
3#endif
4
Victor Stinner5a8c2402018-11-26 22:11:25 +01005/* 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 *text;
24 PyObject *print_file_and_line;
25} PySyntaxErrorObject;
26
27typedef struct {
28 PyException_HEAD
29 PyObject *msg;
30 PyObject *name;
31 PyObject *path;
32} PyImportErrorObject;
33
34typedef struct {
35 PyException_HEAD
36 PyObject *encoding;
37 PyObject *object;
38 Py_ssize_t start;
39 Py_ssize_t end;
40 PyObject *reason;
41} PyUnicodeErrorObject;
42
43typedef struct {
44 PyException_HEAD
45 PyObject *code;
46} PySystemExitObject;
47
48typedef struct {
49 PyException_HEAD
50 PyObject *myerrno;
51 PyObject *strerror;
52 PyObject *filename;
53 PyObject *filename2;
54#ifdef MS_WINDOWS
55 PyObject *winerror;
56#endif
57 Py_ssize_t written; /* only for BlockingIOError, -1 otherwise */
58} PyOSErrorObject;
59
60typedef struct {
61 PyException_HEAD
62 PyObject *value;
63} PyStopIterationObject;
64
Pablo Galindo37494b42021-04-14 02:36:07 +010065typedef struct {
66 PyException_HEAD
Pablo Galindo5bf8bf22021-04-14 15:10:33 +010067 PyObject *name;
68} PyNameErrorObject;
69
70typedef struct {
71 PyException_HEAD
Pablo Galindo37494b42021-04-14 02:36:07 +010072 PyObject *obj;
73 PyObject *name;
74} PyAttributeErrorObject;
75
Victor Stinner5a8c2402018-11-26 22:11:25 +010076/* Compatibility typedefs */
77typedef PyOSErrorObject PyEnvironmentErrorObject;
78#ifdef MS_WINDOWS
79typedef PyOSErrorObject PyWindowsErrorObject;
80#endif
81
82/* Error handling definitions */
83
84PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *);
Victor Stinner8963a7f2020-05-07 15:42:33 +020085PyAPI_FUNC(_PyErr_StackItem*) _PyErr_GetTopmostException(PyThreadState *tstate);
Julien Danjou3430c552020-01-13 17:30:14 +010086PyAPI_FUNC(void) _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, PyObject **);
Victor Stinner5a8c2402018-11-26 22:11:25 +010087
88/* Context manipulation (PEP 3134) */
89
90PyAPI_FUNC(void) _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *);
91
Victor Stinner5a8c2402018-11-26 22:11:25 +010092/* Convenience functions */
93
94#ifdef MS_WINDOWS
Zackery Spytz3c8724f2019-05-28 09:16:33 -060095Py_DEPRECATED(3.3)
Victor Stinner5a8c2402018-11-26 22:11:25 +010096PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilename(
Zackery Spytz3c8724f2019-05-28 09:16:33 -060097 PyObject *, const Py_UNICODE *);
Victor Stinner5a8c2402018-11-26 22:11:25 +010098#endif /* MS_WINDOWS */
99
100/* Like PyErr_Format(), but saves current exception as __context__ and
101 __cause__.
102 */
103PyAPI_FUNC(PyObject *) _PyErr_FormatFromCause(
104 PyObject *exception,
105 const char *format, /* ASCII-encoded string */
106 ...
107 );
108
109#ifdef MS_WINDOWS
110/* XXX redeclare to use WSTRING */
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600111Py_DEPRECATED(3.3)
Victor Stinner5a8c2402018-11-26 22:11:25 +0100112PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename(
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600113 int, const Py_UNICODE *);
114Py_DEPRECATED(3.3)
Victor Stinner5a8c2402018-11-26 22:11:25 +0100115PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename(
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600116 PyObject *,int, const Py_UNICODE *);
Victor Stinner5a8c2402018-11-26 22:11:25 +0100117#endif
118
119/* In exceptions.c */
120
121/* Helper that attempts to replace the current exception with one of the
122 * same type but with a prefix added to the exception text. The resulting
123 * exception description looks like:
124 *
125 * prefix (exc_type: original_exc_str)
126 *
127 * Only some exceptions can be safely replaced. If the function determines
128 * it isn't safe to perform the replacement, it will leave the original
129 * unmodified exception in place.
130 *
131 * Returns a borrowed reference to the new exception (if any), NULL if the
132 * existing exception was left in place.
133 */
134PyAPI_FUNC(PyObject *) _PyErr_TrySetFromCause(
135 const char *prefix_format, /* ASCII-encoded string */
136 ...
137 );
138
139/* In signalmodule.c */
140
141int PySignal_SetWakeupFd(int fd);
Eric Snow64d6cc82019-02-23 15:40:43 -0700142PyAPI_FUNC(int) _PyErr_CheckSignals(void);
Victor Stinner5a8c2402018-11-26 22:11:25 +0100143
144/* Support for adding program text to SyntaxErrors */
145
146PyAPI_FUNC(void) PyErr_SyntaxLocationObject(
147 PyObject *filename,
148 int lineno,
149 int col_offset);
150
151PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject(
152 PyObject *filename,
153 int lineno);
154
Inada Naoki46e19b62020-08-07 16:31:53 +0900155/* Create a UnicodeEncodeError object.
156 *
157 * TODO: This API will be removed in Python 3.11.
158 */
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600159Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create(
Victor Stinner5a8c2402018-11-26 22:11:25 +0100160 const char *encoding, /* UTF-8 encoded string */
161 const Py_UNICODE *object,
162 Py_ssize_t length,
163 Py_ssize_t start,
164 Py_ssize_t end,
165 const char *reason /* UTF-8 encoded string */
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600166 );
Victor Stinner5a8c2402018-11-26 22:11:25 +0100167
Inada Naoki46e19b62020-08-07 16:31:53 +0900168/* Create a UnicodeTranslateError object.
169 *
170 * TODO: This API will be removed in Python 3.11.
171 */
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600172Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create(
Victor Stinner5a8c2402018-11-26 22:11:25 +0100173 const Py_UNICODE *object,
174 Py_ssize_t length,
175 Py_ssize_t start,
176 Py_ssize_t end,
177 const char *reason /* UTF-8 encoded string */
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600178 );
Victor Stinner5a8c2402018-11-26 22:11:25 +0100179PyAPI_FUNC(PyObject *) _PyUnicodeTranslateError_Create(
180 PyObject *object,
181 Py_ssize_t start,
182 Py_ssize_t end,
183 const char *reason /* UTF-8 encoded string */
184 );
185
Victor Stinner71c52e32019-05-27 08:57:14 +0200186PyAPI_FUNC(void) _PyErr_WriteUnraisableMsg(
187 const char *err_msg,
188 PyObject *obj);
Victor Stinner5a8c2402018-11-26 22:11:25 +0100189
Victor Stinner9e5d30c2020-03-07 00:54:20 +0100190PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFunc(
191 const char *func,
192 const char *message);
193
Victor Stinner87d3b9d2020-03-25 19:27:36 +0100194PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFormat(
195 const char *func,
196 const char *format,
197 ...);
198
Victor Stinner9e5d30c2020-03-07 00:54:20 +0100199#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, message)