mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Issue #21578: Fixed misleading error message when ImportError called with
invalid keyword args.
This commit is contained in:
commit
389ef9dcda
3 changed files with 45 additions and 24 deletions
|
@ -612,36 +612,38 @@ SimpleExtendsException(PyExc_BaseException, KeyboardInterrupt,
|
|||
static int
|
||||
ImportError_init(PyImportErrorObject *self, PyObject *args, PyObject *kwds)
|
||||
{
|
||||
static char *kwlist[] = {"name", "path", 0};
|
||||
PyObject *empty_tuple;
|
||||
PyObject *msg = NULL;
|
||||
PyObject *name = NULL;
|
||||
PyObject *path = NULL;
|
||||
|
||||
/* Macro replacement doesn't allow ## to start the first line of a macro,
|
||||
so we move the assignment and NULL check into the if-statement. */
|
||||
#define GET_KWD(kwd) { \
|
||||
kwd = PyDict_GetItemString(kwds, #kwd); \
|
||||
if (kwd) { \
|
||||
Py_INCREF(kwd); \
|
||||
Py_XSETREF(self->kwd, kwd); \
|
||||
if (PyDict_DelItemString(kwds, #kwd)) \
|
||||
return -1; \
|
||||
} \
|
||||
}
|
||||
|
||||
if (kwds) {
|
||||
GET_KWD(name);
|
||||
GET_KWD(path);
|
||||
}
|
||||
|
||||
if (BaseException_init((PyBaseExceptionObject *)self, args, kwds) == -1)
|
||||
return -1;
|
||||
if (PyTuple_GET_SIZE(args) != 1)
|
||||
return 0;
|
||||
if (!PyArg_UnpackTuple(args, "ImportError", 1, 1, &msg))
|
||||
if (BaseException_init((PyBaseExceptionObject *)self, args, NULL) == -1)
|
||||
return -1;
|
||||
|
||||
Py_INCREF(msg);
|
||||
Py_XSETREF(self->msg, msg);
|
||||
empty_tuple = PyTuple_New(0);
|
||||
if (!empty_tuple)
|
||||
return -1;
|
||||
if (!PyArg_ParseTupleAndKeywords(empty_tuple, kwds, "|$OO:ImportError", kwlist,
|
||||
&name, &path)) {
|
||||
Py_DECREF(empty_tuple);
|
||||
return -1;
|
||||
}
|
||||
Py_DECREF(empty_tuple);
|
||||
|
||||
if (name) {
|
||||
Py_INCREF(name);
|
||||
Py_XSETREF(self->name, name);
|
||||
}
|
||||
if (path) {
|
||||
Py_INCREF(path);
|
||||
Py_XSETREF(self->path, path);
|
||||
}
|
||||
if (PyTuple_GET_SIZE(args) == 1) {
|
||||
msg = PyTuple_GET_ITEM(args, 0);
|
||||
Py_INCREF(msg);
|
||||
Py_XSETREF(self->msg, msg);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue