gh-96352: Set AttributeError context in _PyObject_GenericGetAttrWithDict (#96353)

This commit is contained in:
philg314 2022-09-08 13:12:14 +02:00 committed by GitHub
parent 3fedfcf19b
commit b9634ac776
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 0 deletions

View File

@ -2099,6 +2099,11 @@ class AttributeErrorTests(unittest.TestCase):
except AttributeError as exc: except AttributeError as exc:
self.assertEqual("bluch", exc.name) self.assertEqual("bluch", exc.name)
self.assertEqual(obj, exc.obj) self.assertEqual(obj, exc.obj)
try:
object.__getattribute__(obj, "bluch")
except AttributeError as exc:
self.assertEqual("bluch", exc.name)
self.assertEqual(obj, exc.obj)
def test_getattr_has_name_and_obj_for_method(self): def test_getattr_has_name_and_obj_for_method(self):
class A: class A:

View File

@ -0,0 +1,2 @@
Fix :exc:`AttributeError` missing ``name`` and ``obj`` attributes in
:meth:`object.__getattribute__`. Patch by Philip Georgi.

View File

@ -1351,6 +1351,8 @@ _PyObject_GenericGetAttrWithDict(PyObject *obj, PyObject *name,
PyErr_Format(PyExc_AttributeError, PyErr_Format(PyExc_AttributeError,
"'%.50s' object has no attribute '%U'", "'%.50s' object has no attribute '%U'",
tp->tp_name, name); tp->tp_name, name);
set_attribute_error_context(obj, name);
} }
done: done:
Py_XDECREF(descr); Py_XDECREF(descr);