blob: dd3c2caa0cc043517bed788adeb0d8969bae02b2 [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
5#ifdef __cplusplus
6extern "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
17typedef struct {
18 PyException_HEAD
19} PyBaseExceptionObject;
20
21typedef 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
31typedef struct {
32 PyException_HEAD
33 PyObject *msg;
34 PyObject *name;
35 PyObject *path;
36} PyImportErrorObject;
37
38typedef 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
47typedef struct {
48 PyException_HEAD
49 PyObject *code;
50} PySystemExitObject;
51
52typedef 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
64typedef struct {
65 PyException_HEAD
66 PyObject *value;
67} PyStopIterationObject;
68
69/* Compatibility typedefs */
70typedef PyOSErrorObject PyEnvironmentErrorObject;
71#ifdef MS_WINDOWS
72typedef PyOSErrorObject PyWindowsErrorObject;
73#endif
74
75/* Error handling definitions */
76
77PyAPI_FUNC(void) _PyErr_SetKeyError(PyObject *);
Victor Stinner8963a7f2020-05-07 15:42:33 +020078PyAPI_FUNC(_PyErr_StackItem*) _PyErr_GetTopmostException(PyThreadState *tstate);
Julien Danjou3430c552020-01-13 17:30:14 +010079PyAPI_FUNC(void) _PyErr_GetExcInfo(PyThreadState *, PyObject **, PyObject **, PyObject **);
Victor Stinner5a8c2402018-11-26 22:11:25 +010080
81/* Context manipulation (PEP 3134) */
82
83PyAPI_FUNC(void) _PyErr_ChainExceptions(PyObject *, PyObject *, PyObject *);
84
85/* */
86
87#define PyExceptionClass_Name(x) (((PyTypeObject*)(x))->tp_name)
88
89/* Convenience functions */
90
91#ifdef MS_WINDOWS
Zackery Spytz3c8724f2019-05-28 09:16:33 -060092Py_DEPRECATED(3.3)
Victor Stinner5a8c2402018-11-26 22:11:25 +010093PyAPI_FUNC(PyObject *) PyErr_SetFromErrnoWithUnicodeFilename(
Zackery Spytz3c8724f2019-05-28 09:16:33 -060094 PyObject *, const Py_UNICODE *);
Victor Stinner5a8c2402018-11-26 22:11:25 +010095#endif /* MS_WINDOWS */
96
97/* Like PyErr_Format(), but saves current exception as __context__ and
98 __cause__.
99 */
100PyAPI_FUNC(PyObject *) _PyErr_FormatFromCause(
101 PyObject *exception,
102 const char *format, /* ASCII-encoded string */
103 ...
104 );
105
106#ifdef MS_WINDOWS
107/* XXX redeclare to use WSTRING */
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600108Py_DEPRECATED(3.3)
Victor Stinner5a8c2402018-11-26 22:11:25 +0100109PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithUnicodeFilename(
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600110 int, const Py_UNICODE *);
111Py_DEPRECATED(3.3)
Victor Stinner5a8c2402018-11-26 22:11:25 +0100112PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErrWithUnicodeFilename(
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600113 PyObject *,int, const Py_UNICODE *);
Victor Stinner5a8c2402018-11-26 22:11:25 +0100114#endif
115
116/* In exceptions.c */
117
118/* Helper that attempts to replace the current exception with one of the
119 * same type but with a prefix added to the exception text. The resulting
120 * exception description looks like:
121 *
122 * prefix (exc_type: original_exc_str)
123 *
124 * Only some exceptions can be safely replaced. If the function determines
125 * it isn't safe to perform the replacement, it will leave the original
126 * unmodified exception in place.
127 *
128 * Returns a borrowed reference to the new exception (if any), NULL if the
129 * existing exception was left in place.
130 */
131PyAPI_FUNC(PyObject *) _PyErr_TrySetFromCause(
132 const char *prefix_format, /* ASCII-encoded string */
133 ...
134 );
135
136/* In signalmodule.c */
137
138int PySignal_SetWakeupFd(int fd);
Eric Snow64d6cc82019-02-23 15:40:43 -0700139PyAPI_FUNC(int) _PyErr_CheckSignals(void);
Victor Stinner5a8c2402018-11-26 22:11:25 +0100140
141/* Support for adding program text to SyntaxErrors */
142
143PyAPI_FUNC(void) PyErr_SyntaxLocationObject(
144 PyObject *filename,
145 int lineno,
146 int col_offset);
147
148PyAPI_FUNC(PyObject *) PyErr_ProgramTextObject(
149 PyObject *filename,
150 int lineno);
151
152/* Create a UnicodeEncodeError object */
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600153Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeEncodeError_Create(
Victor Stinner5a8c2402018-11-26 22:11:25 +0100154 const char *encoding, /* UTF-8 encoded string */
155 const Py_UNICODE *object,
156 Py_ssize_t length,
157 Py_ssize_t start,
158 Py_ssize_t end,
159 const char *reason /* UTF-8 encoded string */
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600160 );
Victor Stinner5a8c2402018-11-26 22:11:25 +0100161
162/* Create a UnicodeTranslateError object */
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600163Py_DEPRECATED(3.3) PyAPI_FUNC(PyObject *) PyUnicodeTranslateError_Create(
Victor Stinner5a8c2402018-11-26 22:11:25 +0100164 const Py_UNICODE *object,
165 Py_ssize_t length,
166 Py_ssize_t start,
167 Py_ssize_t end,
168 const char *reason /* UTF-8 encoded string */
Zackery Spytz3c8724f2019-05-28 09:16:33 -0600169 );
Victor Stinner5a8c2402018-11-26 22:11:25 +0100170PyAPI_FUNC(PyObject *) _PyUnicodeTranslateError_Create(
171 PyObject *object,
172 Py_ssize_t start,
173 Py_ssize_t end,
174 const char *reason /* UTF-8 encoded string */
175 );
176
Victor Stinner71c52e32019-05-27 08:57:14 +0200177PyAPI_FUNC(void) _PyErr_WriteUnraisableMsg(
178 const char *err_msg,
179 PyObject *obj);
Victor Stinner5a8c2402018-11-26 22:11:25 +0100180
Victor Stinner9e5d30c2020-03-07 00:54:20 +0100181PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFunc(
182 const char *func,
183 const char *message);
184
Victor Stinner87d3b9d2020-03-25 19:27:36 +0100185PyAPI_FUNC(void) _Py_NO_RETURN _Py_FatalErrorFormat(
186 const char *func,
187 const char *format,
188 ...);
189
Victor Stinner9e5d30c2020-03-07 00:54:20 +0100190#define Py_FatalError(message) _Py_FatalErrorFunc(__func__, message)
191
Victor Stinner5a8c2402018-11-26 22:11:25 +0100192#ifdef __cplusplus
193}
194#endif