summaryrefslogtreecommitdiffstats
path: root/Objects/classobject.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1992-09-04 09:45:18 (GMT)
committerGuido van Rossum <guido@python.org>1992-09-04 09:45:18 (GMT)
commit94472a0374f68fc7c746671eb87dc32253b02f05 (patch)
tree2771e08e0f6355403716eac5d9db818643f7d732 /Objects/classobject.c
parent9a4e3fc56a2bacc7af884117c53b37fdf104daa2 (diff)
downloadcpython-94472a0374f68fc7c746671eb87dc32253b02f05.zip
cpython-94472a0374f68fc7c746671eb87dc32253b02f05.tar.gz
cpython-94472a0374f68fc7c746671eb87dc32253b02f05.tar.bz2
classobject.c moduleobject.c stdwinmodule.c xxobject.c:
raise AttributeError, not KeyError, when attribute deletion fails. sunaudiodevmodule.c: check for deletion before calling setmember.
Diffstat (limited to 'Objects/classobject.c')
-rw-r--r--Objects/classobject.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/Objects/classobject.c b/Objects/classobject.c
index 19f887c..514869c 100644
--- a/Objects/classobject.c
+++ b/Objects/classobject.c
@@ -133,8 +133,13 @@ class_setattr(op, 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);
}
@@ -245,8 +250,13 @@ instance_setattr(inst, 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);
}