diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-09-27 17:51:04 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-09-27 17:51:04 (GMT) |
commit | 389ef9dcdabe3ed83023ea50deff4b1cd3927dd3 (patch) | |
tree | 9d1e729ee68e6c16c02879b961fc7fe217dbdd74 /Objects/exceptions.c | |
parent | a12e7842a5f572afd6bde108f24931f9262f38ef (diff) | |
parent | 47dee11ba76a12d22277562b9ccea51259a5ecc0 (diff) | |
download | cpython-389ef9dcdabe3ed83023ea50deff4b1cd3927dd3.zip cpython-389ef9dcdabe3ed83023ea50deff4b1cd3927dd3.tar.gz cpython-389ef9dcdabe3ed83023ea50deff4b1cd3927dd3.tar.bz2 |
Issue #21578: Fixed misleading error message when ImportError called with
invalid keyword args.
Diffstat (limited to 'Objects/exceptions.c')
-rw-r--r-- | Objects/exceptions.c | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/Objects/exceptions.c b/Objects/exceptions.c index 6fb5eb7..f63f06a 100644 --- a/Objects/exceptions.c +++ b/Objects/exceptions.c @@ -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, NULL) == -1) + return -1; - if (BaseException_init((PyBaseExceptionObject *)self, args, kwds) == -1) + empty_tuple = PyTuple_New(0); + if (!empty_tuple) return -1; - if (PyTuple_GET_SIZE(args) != 1) - return 0; - if (!PyArg_UnpackTuple(args, "ImportError", 1, 1, &msg)) + if (!PyArg_ParseTupleAndKeywords(empty_tuple, kwds, "|$OO:ImportError", kwlist, + &name, &path)) { + Py_DECREF(empty_tuple); return -1; + } + Py_DECREF(empty_tuple); - Py_INCREF(msg); - Py_XSETREF(self->msg, msg); + 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; } |