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;
}
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
config_dict_invalid_type(name);
}
- else {
+ else if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
config_dict_invalid_value(name);
}
return -1;
}
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;