bpo-30978: str.format_map() now passes key lookup exceptions through. (#2790)

Previously any exception was replaced with a KeyError exception.
This commit is contained in:
Serhiy Storchaka 2017-08-03 11:45:23 +03:00 committed by GitHub
parent 25e4f779d7
commit 5075416b8f
4 changed files with 20 additions and 7 deletions

View file

@ -410,18 +410,22 @@ get_field_object(SubString *input, PyObject *args, PyObject *kwargs,
if (index == -1) {
/* look up in kwargs */
PyObject *key = SubString_new_object(&first);
if (key == NULL)
if (key == NULL) {
goto error;
/* Use PyObject_GetItem instead of PyDict_GetItem because this
code is no longer just used with kwargs. It might be passed
a non-dict when called through format_map. */
if ((kwargs == NULL) || (obj = PyObject_GetItem(kwargs, key)) == NULL) {
}
if (kwargs == NULL) {
PyErr_SetObject(PyExc_KeyError, key);
Py_DECREF(key);
goto error;
}
/* Use PyObject_GetItem instead of PyDict_GetItem because this
code is no longer just used with kwargs. It might be passed
a non-dict when called through format_map. */
obj = PyObject_GetItem(kwargs, key);
Py_DECREF(key);
if (obj == NULL) {
goto error;
}
}
else {
/* If args is NULL, we have a format string with a positional field