From 0ad81d4db2f409d72f469d0b74ab597be772a68e Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Fri, 16 Apr 2021 17:12:03 +0100 Subject: bpo-38530: Match exactly AttributeError and NameError when offering suggestions (GH-25443) --- Lib/test/test_exceptions.py | 15 +++++++++++++++ Python/suggestions.c | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index ebeb67b..bd20b23 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1537,6 +1537,21 @@ class NameErrorTests(unittest.TestCase): self.assertNotIn("blech", err.getvalue()) + def test_unbound_local_error_doesn_not_match(self): + def foo(): + something = 3 + print(somethong) + somethong = 3 + + try: + foo() + except UnboundLocalError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertNotIn("something", err.getvalue()) + + class AttributeErrorTests(unittest.TestCase): def test_attributes(self): # Setting 'attr' should not be a problem. diff --git a/Python/suggestions.c b/Python/suggestions.c index 258e3f1..e422760 100644 --- a/Python/suggestions.c +++ b/Python/suggestions.c @@ -181,9 +181,9 @@ offer_suggestions_for_name_error(PyNameErrorObject *exc) { PyObject *_Py_Offer_Suggestions(PyObject *exception) { PyObject *result = NULL; assert(!PyErr_Occurred()); - if (PyErr_GivenExceptionMatches(exception, PyExc_AttributeError)) { + if (Py_IS_TYPE(exception, (PyTypeObject*)PyExc_AttributeError)) { result = offer_suggestions_for_attribute_error((PyAttributeErrorObject *) exception); - } else if (PyErr_GivenExceptionMatches(exception, PyExc_NameError)) { + } else if (Py_IS_TYPE(exception, (PyTypeObject*)PyExc_NameError)) { result = offer_suggestions_for_name_error((PyNameErrorObject *) exception); } return result; -- cgit v0.12