From: Pablo Galindo Date: Fri, 16 Apr 2021 16:12:03 +0000 (+0100) Subject: bpo-38530: Match exactly AttributeError and NameError when offering suggestions ... X-Git-Tag: v3.10.0b1~261 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0ad81d4db2f409d72f469d0b74ab597be772a68e;p=thirdparty%2FPython%2Fcpython.git bpo-38530: Match exactly AttributeError and NameError when offering suggestions (GH-25443) --- diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index ebeb67b45128..bd20b232e541 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 258e3f1833e6..e42276092073 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;