diff options
Diffstat (limited to 'Modules/xxlimited.c')
-rw-r--r-- | Modules/xxlimited.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/Modules/xxlimited.c b/Modules/xxlimited.c index 5586989..190f993 100644 --- a/Modules/xxlimited.c +++ b/Modules/xxlimited.c @@ -78,11 +78,14 @@ static PyObject * Xxo_getattro(XxoObject *self, PyObject *name) { if (self->x_attr != NULL) { - PyObject *v = PyDict_GetItem(self->x_attr, name); + PyObject *v = PyDict_GetItemWithError(self->x_attr, name); if (v != NULL) { Py_INCREF(v); return v; } + else if (PyErr_Occurred()) { + return NULL; + } } return PyObject_GenericGetAttr((PyObject *)self, name); } @@ -97,7 +100,7 @@ Xxo_setattr(XxoObject *self, const char *name, PyObject *v) } if (v == NULL) { int rv = PyDict_DelItemString(self->x_attr, name); - if (rv < 0) + if (rv < 0 && PyErr_ExceptionMatches(PyExc_KeyError)) PyErr_SetString(PyExc_AttributeError, "delete non-existing Xxo attribute"); return rv; |