raise AttributeError, not KeyError, when attribute deletion fails.
sunaudiodevmodule.c: check for deletion before calling setmember.
if (tp->t_attr == NULL)
return -1;
}
- if (v == NULL)
- return dictremove(tp->t_attr, name);
+ if (v == NULL) {
+ int rv = dictremove(tp->t_attr, name);
+ if (rv < 0)
+ err_setstr(AttributeError,
+ "delete non-existing text object attribute");
+ return rv;
+ }
else
return dictinsert(tp->t_attr, name, v);
}
if (mp->m_attr == NULL)
return -1;
}
- if (v == NULL)
- return dictremove(mp->m_attr, name);
+ if (v == NULL) {
+ int rv = dictremove(mp->m_attr, name);
+ if (rv < 0)
+ err_setstr(AttributeError,
+ "delete non-existing menu object attribute");
+ return rv;
+ }
else
return dictinsert(mp->m_attr, name, v);
}
if (wp->w_attr == NULL)
return -1;
}
- if (v == NULL)
- return dictremove(wp->w_attr, name);
+ if (v == NULL) {
+ int rv = dictremove(wp->w_attr, name);
+ if (rv < 0)
+ err_setstr(AttributeError,
+ "delete non-existing menu object attribute");
+ return rv;
+ }
else
return dictinsert(wp->w_attr, name, v);
}
char *name;
object *v;
{
+
+ if (v == NULL) {
+ err_setstr(TypeError,
+ "can't delete sun audio status attributes");
+ return NULL;
+ }
return setmember((char *)&xp->ai, sads_ml, name, v);
}
return -1;
}
}
- if (v == NULL)
- return dictremove(op->cl_methods, name);
+ if (v == NULL) {
+ int rv = dictremove(op->cl_methods, name);
+ if (rv < 0)
+ err_setstr(AttributeError,
+ "delete non-existing class attribute");
+ return rv;
+ }
else
return dictinsert(op->cl_methods, name, v);
}
return -1;
}
}
- if (v == NULL)
- return dictremove(inst->in_attr, name);
+ if (v == NULL) {
+ int rv = dictremove(inst->in_attr, name);
+ if (rv < 0)
+ err_setstr(AttributeError,
+ "delete non-existing instance attribute");
+ return rv;
+ }
else
return dictinsert(inst->in_attr, name, v);
}
object *v;
{
if (strcmp(name, "__dict__") == 0 || strcmp(name, "__name__") == 0) {
- err_setstr(TypeError, "can't assign to reserved member name");
+ err_setstr(TypeError, "read-only special attribute");
return -1;
}
- if (v == NULL)
- return dictremove(m->md_dict, name);
+ if (v == NULL) {
+ int rv = dictremove(m->md_dict, name);
+ if (rv < 0)
+ err_setstr(AttributeError,
+ "delete non-existing module attribute");
+ return rv;
+ }
else
return dictinsert(m->md_dict, name, v);
}
if (xp->x_attr == NULL)
return -1;
}
- if (v == NULL)
- return dictremove(xp->x_attr, name);
+ if (v == NULL) {
+ int rv = dictremove(xp->x_attr, name);
+ if (rv < 0)
+ err_setstr(AttributeError,
+ "delete non-existing xx attribute");
+ return rv;
+ }
else
return dictinsert(xp->x_attr, name, v);
}