Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Doc/library/exceptions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -971,6 +971,12 @@ their subgroups based on the types of the contained exceptions.
raises a :exc:`TypeError` if any contained exception is not an
:exc:`Exception` subclass.

.. impl-detail::

The ``excs`` parameter may be any sequence, but lists and tuples are
specifically processed more efficiently here. For optimal performance,
pass a tuple as ``excs``.

.. attribute:: message

The ``msg`` argument to the constructor. This is a read-only attribute.
Expand Down
1 change: 1 addition & 0 deletions Include/cpython/pyerrors.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ typedef struct {
PyException_HEAD
PyObject *msg;
PyObject *excs;
PyObject *excs_str;
} PyBaseExceptionGroupObject;

typedef struct {
Expand Down
73 changes: 72 additions & 1 deletion Lib/test/test_exception_group.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import collections.abc
import collections
import types
import unittest
from test.support import skip_emscripten_stack_overflow, skip_wasi_stack_overflow, exceeds_recursion_limit
Expand Down Expand Up @@ -193,6 +193,77 @@ class MyEG(ExceptionGroup):
"MyEG('flat', [ValueError(1), TypeError(2)]), "
"TypeError(2)])"))

def test_exceptions_mutation(self):
class MyEG(ExceptionGroup):
pass

excs = [ValueError(1), TypeError(2)]
eg = MyEG('test', excs)

self.assertEqual(repr(eg), "MyEG('test', [ValueError(1), TypeError(2)])")
excs.clear()

# Ensure that clearing the exceptions sequence doesn't change the repr.
self.assertEqual(repr(eg), "MyEG('test', [ValueError(1), TypeError(2)])")

# Ensure that the args are still as passed.
self.assertEqual(eg.args, ('test', []))

excs = (ValueError(1), KeyboardInterrupt(2))
eg = BaseExceptionGroup('test', excs)

# Ensure that immutable sequences still work fine.
self.assertEqual(
repr(eg),
"BaseExceptionGroup('test', (ValueError(1), KeyboardInterrupt(2)))"
)

# Test non-standard custom sequences.
excs = collections.deque([ValueError(1), TypeError(2)])
eg = ExceptionGroup('test', excs)

self.assertEqual(
repr(eg),
"ExceptionGroup('test', deque([ValueError(1), TypeError(2)]))"
)
excs.clear()

# Ensure that clearing the exceptions sequence doesn't change the repr.
self.assertEqual(
repr(eg),
"ExceptionGroup('test', deque([ValueError(1), TypeError(2)]))"
)

def test_repr_raises(self):
class MySeq(collections.abc.Sequence):
def __init__(self, raises):
self.raises = raises

def __len__(self):
return 1

def __getitem__(self, index):
if index == 0:
return ValueError(1)
raise IndexError

def __repr__(self):
if self.raises:
raise self.raises
return None

seq = MySeq(None)
with self.assertRaisesRegex(
TypeError,
r".*MySeq\.__repr__\(\) must return a str, not NoneType"
):
ExceptionGroup("test", seq)

seq = MySeq(ValueError)
with self.assertRaises(ValueError):
BaseExceptionGroup("test", seq)



def create_simple_eg():
excs = []
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Ensure the :meth:`~object.__repr__` for :exc:`ExceptionGroup` and :exc:`BaseExceptionGroup` does
not change when the exception sequence that was original passed in to its constructor is subsequently mutated.
87 changes: 76 additions & 11 deletions Objects/exceptions.c
Original file line number Diff line number Diff line change
Expand Up @@ -683,7 +683,7 @@
0, 0, 0, 0, 0, \
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, \
PyDoc_STR(EXCDOC), EXCSTORE ## _traverse, \
EXCSTORE ## _clear, 0, 0, 0, 0, 0, 0, 0, &_ ## EXCBASE, \

Check failure on line 686 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Hypothesis tests on Ubuntu

‘_PyExc_ImportError’ undeclared here (not in a function); did you mean ‘PyExc_ImportError’?

Check failure on line 686 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Cross build Linux

‘_PyExc_ImportError’ undeclared here (not in a function); did you mean ‘PyExc_ImportError’?

Check failure on line 686 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Address sanitizer (ubuntu-24.04)

‘_PyExc_ImportError’ undeclared here (not in a function); did you mean ‘PyExc_ImportError’?

Check failure on line 686 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04)

‘_PyExc_ImportError’ undeclared here (not in a function); did you mean ‘PyExc_ImportError’?

Check failure on line 686 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04)

‘_PyExc_ImportError’ undeclared here (not in a function); did you mean ‘PyExc_ImportError’?

Check failure on line 686 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (bolt) / build and test (ubuntu-24.04)

‘_PyExc_ImportError’ undeclared here (not in a function); did you mean ‘PyExc_ImportError’?

Check failure on line 686 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04-arm)

‘_PyExc_ImportError’ undeclared here (not in a function); did you mean ‘PyExc_ImportError’?

Check failure on line 686 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04-arm)

‘_PyExc_ImportError’ undeclared here (not in a function); did you mean ‘PyExc_ImportError’?
0, 0, 0, offsetof(Py ## EXCSTORE ## Object, dict), \
EXCSTORE ## _init, 0, 0, \
};
Expand All @@ -695,12 +695,12 @@

#define ComplexExtendsException(EXCBASE, EXCNAME, EXCSTORE, EXCNEW, \
EXCMETHODS, EXCMEMBERS, EXCGETSET, \
EXCSTR, EXCDOC) \
EXCSTR, EXCREPR, EXCDOC) \
static PyTypeObject _PyExc_ ## EXCNAME = { \
PyVarObject_HEAD_INIT(NULL, 0) \
# EXCNAME, \
sizeof(Py ## EXCSTORE ## Object), 0, \
EXCSTORE ## _dealloc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
EXCSTORE ## _dealloc, 0, 0, 0, 0, EXCREPR, 0, 0, 0, 0, 0, \
EXCSTR, 0, 0, 0, \
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC, \
PyDoc_STR(EXCDOC), EXCSTORE ## _traverse, \
Expand Down Expand Up @@ -793,7 +793,7 @@
}

ComplexExtendsException(PyExc_Exception, StopIteration, StopIteration,
0, 0, StopIteration_members, 0, 0,
0, 0, StopIteration_members, 0, 0, 0,
"Signal the end from iterator.__next__().");


Expand Down Expand Up @@ -866,7 +866,7 @@
};

ComplexExtendsException(PyExc_BaseException, SystemExit, SystemExit,
0, 0, SystemExit_members, 0, 0,
0, 0, SystemExit_members, 0, 0, 0,
"Request to exit from the interpreter.");

/*
Expand All @@ -891,6 +891,7 @@

PyObject *message = NULL;
PyObject *exceptions = NULL;
PyObject *exceptions_str = NULL;

if (!PyArg_ParseTuple(args,
"UO:BaseExceptionGroup.__new__",
Expand All @@ -906,6 +907,18 @@
return NULL;
}

/* Save initial exceptions sequence as a string in case sequence is mutated */
if (!PyList_Check(exceptions) && !PyTuple_Check(exceptions)) {
exceptions_str = PyObject_Repr(exceptions);
if (exceptions_str == NULL) {
/* We don't hold a reference to exceptions, so clear it before
* attempting a decref in the cleanup.
*/
exceptions = NULL;
goto error;
}
}

exceptions = PySequence_Tuple(exceptions);
if (!exceptions) {
return NULL;
Expand Down Expand Up @@ -989,9 +1002,11 @@

self->msg = Py_NewRef(message);
self->excs = exceptions;
self->excs_str = exceptions_str;
return (PyObject*)self;
error:
Py_DECREF(exceptions);
Py_XDECREF(exceptions);
Py_XDECREF(exceptions_str);
return NULL;
}

Expand Down Expand Up @@ -1030,6 +1045,7 @@
PyBaseExceptionGroupObject *self = PyBaseExceptionGroupObject_CAST(op);
Py_CLEAR(self->msg);
Py_CLEAR(self->excs);
Py_CLEAR(self->excs_str);
return BaseException_clear(op);
}

Expand All @@ -1047,6 +1063,7 @@
PyBaseExceptionGroupObject *self = PyBaseExceptionGroupObject_CAST(op);
Py_VISIT(self->msg);
Py_VISIT(self->excs);
Py_VISIT(self->excs_str);
return BaseException_traverse(op, visit, arg);
}

Expand All @@ -1064,6 +1081,54 @@
self->msg, num_excs, num_excs > 1 ? "s" : "");
}

static PyObject *
BaseExceptionGroup_repr(PyObject *op)
{
PyBaseExceptionGroupObject *self = PyBaseExceptionGroupObject_CAST(op);
assert(self->msg);

PyObject *exceptions_str = NULL;

/* Use the saved exceptions string for custom sequences. */
if (self->excs_str) {
exceptions_str = Py_NewRef(self->excs_str);
}
else {
assert(self->excs);

/* Older versions delegated to BaseException, inserting the current
* value of self.args[1]; but this can be mutable and go out-of-sync
* with self.exceptions. Instead, use self.exceptions for accuracy,
* making it look like self.args[1] for backwards compatibility. */
if (PyList_Check(PyTuple_GET_ITEM(self->args, 1))) {
PyObject *exceptions_list = PySequence_List(self->excs);
if (!exceptions_list) {
return NULL;
}

exceptions_str = PyObject_Repr(exceptions_list);
Py_DECREF(exceptions_list);
}
else {
exceptions_str = PyObject_Repr(self->excs);
}

if (!exceptions_str) {
return NULL;
}
}

assert(exceptions_str != NULL);

const char *name = _PyType_Name(Py_TYPE(self));
PyObject *repr = PyUnicode_FromFormat(
"%s(%R, %U)", name,
self->msg, exceptions_str);

Py_DECREF(exceptions_str);
return repr;
}

/*[clinic input]
@critical_section
BaseExceptionGroup.derive
Expand Down Expand Up @@ -1698,7 +1763,7 @@
ComplexExtendsException(PyExc_BaseException, BaseExceptionGroup,
BaseExceptionGroup, BaseExceptionGroup_new /* new */,
BaseExceptionGroup_methods, BaseExceptionGroup_members,
0 /* getset */, BaseExceptionGroup_str,
0 /* getset */, BaseExceptionGroup_str, BaseExceptionGroup_repr,
"A combination of multiple unrelated exceptions.");

/*
Expand Down Expand Up @@ -1807,7 +1872,7 @@
}

static PyObject *
ImportError_str(PyObject *op)

Check warning on line 1875 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Hypothesis tests on Ubuntu

‘ImportError_str’ defined but not used [-Wunused-function]

Check warning on line 1875 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Cross build Linux

‘ImportError_str’ defined but not used [-Wunused-function]

Check warning on line 1875 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Address sanitizer (ubuntu-24.04)

‘ImportError_str’ defined but not used [-Wunused-function]

Check warning on line 1875 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04)

‘ImportError_str’ defined but not used [-Wunused-function]

Check warning on line 1875 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04)

‘ImportError_str’ defined but not used [-Wunused-function]

Check warning on line 1875 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (bolt) / build and test (ubuntu-24.04)

‘ImportError_str’ defined but not used [-Wunused-function]

Check warning on line 1875 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04-arm)

‘ImportError_str’ defined but not used [-Wunused-function]

Check warning on line 1875 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04-arm)

‘ImportError_str’ defined but not used [-Wunused-function]
{
PyImportErrorObject *self = PyImportErrorObject_CAST(op);
if (self->msg && PyUnicode_CheckExact(self->msg)) {
Expand Down Expand Up @@ -1864,7 +1929,7 @@
return res;
}

static PyMemberDef ImportError_members[] = {

Check warning on line 1932 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Hypothesis tests on Ubuntu

‘ImportError_members’ defined but not used [-Wunused-variable]

Check warning on line 1932 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Cross build Linux

‘ImportError_members’ defined but not used [-Wunused-variable]

Check warning on line 1932 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Address sanitizer (ubuntu-24.04)

‘ImportError_members’ defined but not used [-Wunused-variable]

Check warning on line 1932 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04)

‘ImportError_members’ defined but not used [-Wunused-variable]

Check warning on line 1932 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04)

‘ImportError_members’ defined but not used [-Wunused-variable]

Check warning on line 1932 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (bolt) / build and test (ubuntu-24.04)

‘ImportError_members’ defined but not used [-Wunused-variable]

Check warning on line 1932 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04-arm)

‘ImportError_members’ defined but not used [-Wunused-variable]

Check warning on line 1932 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04-arm)

‘ImportError_members’ defined but not used [-Wunused-variable]
{"msg", _Py_T_OBJECT, offsetof(PyImportErrorObject, msg), 0,
PyDoc_STR("exception message")},
{"name", _Py_T_OBJECT, offsetof(PyImportErrorObject, name), 0,
Expand All @@ -1876,17 +1941,17 @@
{NULL} /* Sentinel */
};

static PyMethodDef ImportError_methods[] = {

Check warning on line 1944 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Hypothesis tests on Ubuntu

‘ImportError_methods’ defined but not used [-Wunused-variable]

Check warning on line 1944 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Cross build Linux

‘ImportError_methods’ defined but not used [-Wunused-variable]

Check warning on line 1944 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Address sanitizer (ubuntu-24.04)

‘ImportError_methods’ defined but not used [-Wunused-variable]

Check warning on line 1944 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04)

‘ImportError_methods’ defined but not used [-Wunused-variable]

Check warning on line 1944 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04)

‘ImportError_methods’ defined but not used [-Wunused-variable]

Check warning on line 1944 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (bolt) / build and test (ubuntu-24.04)

‘ImportError_methods’ defined but not used [-Wunused-variable]

Check warning on line 1944 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04-arm)

‘ImportError_methods’ defined but not used [-Wunused-variable]

Check warning on line 1944 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04-arm)

‘ImportError_methods’ defined but not used [-Wunused-variable]
{"__reduce__", ImportError_reduce, METH_NOARGS},
{NULL}
};

ComplexExtendsException(PyExc_Exception, ImportError,

Check failure on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Windows (free-threading) / Build and test (x64)

syntax error: ',' [D:\a\cpython\cpython\PCbuild\_freeze_module.vcxproj]

Check failure on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Windows / Build and test (x64)

syntax error: ',' [D:\a\cpython\cpython\PCbuild\_freeze_module.vcxproj]

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Hypothesis tests on Ubuntu

type defaults to ‘int’ in declaration of ‘ComplexExtendsException’ [-Wimplicit-int]

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Hypothesis tests on Ubuntu

data definition has no type or storage class

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Cross build Linux

type defaults to ‘int’ in declaration of ‘ComplexExtendsException’ [-Wimplicit-int]

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Cross build Linux

data definition has no type or storage class

Check failure on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Windows / Build and test (arm64)

syntax error: ',' [C:\a\cpython\cpython\PCbuild\_freeze_module.vcxproj]

Check failure on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Windows (free-threading) / Build and test (arm64)

syntax error: ',' [C:\a\cpython\cpython\PCbuild\_freeze_module.vcxproj]

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Address sanitizer (ubuntu-24.04)

type defaults to ‘int’ in declaration of ‘ComplexExtendsException’ [-Wimplicit-int]

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Address sanitizer (ubuntu-24.04)

data definition has no type or storage class

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04)

type defaults to ‘int’ in declaration of ‘ComplexExtendsException’ [-Wimplicit-int]

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04)

data definition has no type or storage class

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04)

type defaults to ‘int’ in declaration of ‘ComplexExtendsException’ [-Wimplicit-int]

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04)

data definition has no type or storage class

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (bolt) / build and test (ubuntu-24.04)

type defaults to ‘int’ in declaration of ‘ComplexExtendsException’ [-Wimplicit-int]

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (bolt) / build and test (ubuntu-24.04)

data definition has no type or storage class

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04-arm)

type defaults to ‘int’ in declaration of ‘ComplexExtendsException’ [-Wimplicit-int]

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04-arm)

data definition has no type or storage class

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04-arm)

type defaults to ‘int’ in declaration of ‘ComplexExtendsException’ [-Wimplicit-int]

Check warning on line 1949 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04-arm)

data definition has no type or storage class
ImportError, 0 /* new */,
ImportError_methods, ImportError_members,
0 /* getset */, ImportError_str,
"Import can't find module, or can't find name in "
"module.");

Check warning on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Windows (free-threading) / Build and test (x64)

not enough arguments for function-like macro invocation 'PyDoc_STR' [D:\a\cpython\cpython\PCbuild\_freeze_module.vcxproj]

Check warning on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Windows (free-threading) / Build and test (x64)

not enough arguments for function-like macro invocation 'ComplexExtendsException' [D:\a\cpython\cpython\PCbuild\_freeze_module.vcxproj]

Check warning on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Windows / Build and test (x64)

not enough arguments for function-like macro invocation 'PyDoc_STR' [D:\a\cpython\cpython\PCbuild\_freeze_module.vcxproj]

Check warning on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Windows / Build and test (x64)

not enough arguments for function-like macro invocation 'ComplexExtendsException' [D:\a\cpython\cpython\PCbuild\_freeze_module.vcxproj]

Check failure on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Hypothesis tests on Ubuntu

macro "ComplexExtendsException" requires 10 arguments, but only 9 given

Check failure on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Cross build Linux

macro "ComplexExtendsException" requires 10 arguments, but only 9 given

Check warning on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Windows / Build and test (arm64)

not enough arguments for function-like macro invocation 'PyDoc_STR' [C:\a\cpython\cpython\PCbuild\_freeze_module.vcxproj]

Check warning on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Windows / Build and test (arm64)

not enough arguments for function-like macro invocation 'ComplexExtendsException' [C:\a\cpython\cpython\PCbuild\_freeze_module.vcxproj]

Check warning on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Windows (free-threading) / Build and test (arm64)

not enough arguments for function-like macro invocation 'PyDoc_STR' [C:\a\cpython\cpython\PCbuild\_freeze_module.vcxproj]

Check warning on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Windows (free-threading) / Build and test (arm64)

not enough arguments for function-like macro invocation 'ComplexExtendsException' [C:\a\cpython\cpython\PCbuild\_freeze_module.vcxproj]

Check failure on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Address sanitizer (ubuntu-24.04)

macro "ComplexExtendsException" requires 10 arguments, but only 9 given

Check failure on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04)

macro "ComplexExtendsException" requires 10 arguments, but only 9 given

Check failure on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04)

macro "ComplexExtendsException" requires 10 arguments, but only 9 given

Check failure on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (bolt) / build and test (ubuntu-24.04)

macro "ComplexExtendsException" requires 10 arguments, but only 9 given

Check failure on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu / build and test (ubuntu-24.04-arm)

macro "ComplexExtendsException" requires 10 arguments, but only 9 given

Check failure on line 1954 in Objects/exceptions.c

View workflow job for this annotation

GitHub Actions / Ubuntu (free-threading) / build and test (ubuntu-24.04-arm)

macro "ComplexExtendsException" requires 10 arguments, but only 9 given

/*
* ModuleNotFoundError extends ImportError
Expand Down Expand Up @@ -2356,7 +2421,7 @@
ComplexExtendsException(PyExc_Exception, OSError,
OSError, OSError_new,
OSError_methods, OSError_members, OSError_getset,
OSError_str,
OSError_str, 0,
"Base class for I/O related errors.");


Expand Down Expand Up @@ -2497,7 +2562,7 @@
ComplexExtendsException(PyExc_Exception, NameError,
NameError, 0,
NameError_methods, NameError_members,
0, BaseException_str, "Name not found globally.");
0, BaseException_str, 0, "Name not found globally.");

/*
* UnboundLocalError extends NameError
Expand Down Expand Up @@ -2631,7 +2696,7 @@
ComplexExtendsException(PyExc_Exception, AttributeError,
AttributeError, 0,
AttributeError_methods, AttributeError_members,
0, BaseException_str, "Attribute not found.");
0, BaseException_str, 0, "Attribute not found.");

/*
* SyntaxError extends Exception
Expand Down Expand Up @@ -2830,7 +2895,7 @@

ComplexExtendsException(PyExc_Exception, SyntaxError, SyntaxError,
0, 0, SyntaxError_members, 0,
SyntaxError_str, "Invalid syntax.");
SyntaxError_str, 0, "Invalid syntax.");


/*
Expand Down Expand Up @@ -2890,7 +2955,7 @@
}

ComplexExtendsException(PyExc_LookupError, KeyError, BaseException,
0, 0, 0, 0, KeyError_str, "Mapping key not found.");
0, 0, 0, 0, KeyError_str, 0, "Mapping key not found.");


/*
Expand Down
Loading