diff options
Diffstat (limited to 'Python/initconfig.c')
-rw-r--r-- | Python/initconfig.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/Python/initconfig.c b/Python/initconfig.c index 1fcc3600aa..4d95ac5d88 100644 --- a/Python/initconfig.c +++ b/Python/initconfig.c @@ -1050,8 +1050,8 @@ fail: static PyObject* config_dict_get(PyObject *dict, const char *name) { - PyObject *item = PyDict_GetItemString(dict, name); - if (item == NULL) { + PyObject *item = _PyDict_GetItemStringWithError(dict, name); + if (item == NULL && !PyErr_Occurred()) { PyErr_Format(PyExc_ValueError, "missing config key: %s", name); return NULL; } @@ -1085,7 +1085,7 @@ config_dict_get_int(PyObject *dict, const char *name, int *result) if (PyErr_ExceptionMatches(PyExc_TypeError)) { config_dict_invalid_type(name); } - else { + else if (PyErr_ExceptionMatches(PyExc_OverflowError)) { config_dict_invalid_value(name); } return -1; @@ -1104,7 +1104,12 @@ config_dict_get_ulong(PyObject *dict, const char *name, unsigned long *result) } unsigned long value = PyLong_AsUnsignedLong(item); if (value == (unsigned long)-1 && PyErr_Occurred()) { - config_dict_invalid_value(name); + if (PyErr_ExceptionMatches(PyExc_TypeError)) { + config_dict_invalid_type(name); + } + else if (PyErr_ExceptionMatches(PyExc_OverflowError)) { + config_dict_invalid_value(name); + } return -1; } *result = value; |