classobject.c moduleobject.c stdwinmodule.c xxobject.c:
raise AttributeError, not KeyError, when attribute deletion fails.
sunaudiodevmodule.c: check for deletion before calling setmember.
diff --git a/Modules/stdwinmodule.c b/Modules/stdwinmodule.c
index e33610d..8b3812b 100644
--- a/Modules/stdwinmodule.c
+++ b/Modules/stdwinmodule.c
@@ -1051,8 +1051,13 @@
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);
}
@@ -1253,8 +1258,13 @@
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);
}
@@ -1655,8 +1665,13 @@
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);
}