summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2021-07-17 00:01:53 (GMT)
committerGitHub <noreply@github.com>2021-07-17 00:01:53 (GMT)
commitefda9054b9fc91e69ecb34eae84fdd2ca8e6feef (patch)
tree0273826de9b5809067e8a02b3858a3a2152cafab /Python
parenta0b1d401db52391d13479c53ee3880e6640df98c (diff)
downloadcpython-efda9054b9fc91e69ecb34eae84fdd2ca8e6feef.zip
cpython-efda9054b9fc91e69ecb34eae84fdd2ca8e6feef.tar.gz
cpython-efda9054b9fc91e69ecb34eae84fdd2ca8e6feef.tar.bz2
bpo-44655: Include the name of the type in unset __slots__ attribute errors (GH-27199) (GH-27201)
(cherry picked from commit f783428a2313a729ca8b539c5a86ff114b9ff375) Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com> Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
Diffstat (limited to 'Python')
-rw-r--r--Python/structmember.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/Python/structmember.c b/Python/structmember.c
index ba88e15..c7e3188 100644
--- a/Python/structmember.c
+++ b/Python/structmember.c
@@ -5,11 +5,11 @@
#include "structmember.h" // PyMemberDef
PyObject *
-PyMember_GetOne(const char *addr, PyMemberDef *l)
+PyMember_GetOne(const char *obj_addr, PyMemberDef *l)
{
PyObject *v;
- addr += l->offset;
+ const char* addr = obj_addr + l->offset;
switch (l->type) {
case T_BOOL:
v = PyBool_FromLong(*(char*)addr);
@@ -69,8 +69,13 @@ PyMember_GetOne(const char *addr, PyMemberDef *l)
break;
case T_OBJECT_EX:
v = *(PyObject **)addr;
- if (v == NULL)
- PyErr_SetString(PyExc_AttributeError, l->name);
+ if (v == NULL) {
+ PyObject *obj = (PyObject *)obj_addr;
+ PyTypeObject *tp = Py_TYPE(obj);
+ PyErr_Format(PyExc_AttributeError,
+ "'%.200s' object has no attribute '%s'",
+ tp->tp_name, l->name);
+ }
Py_XINCREF(v);
break;
case T_LONGLONG: