bpo-38530: Match exactly AttributeError and NameError when offering suggestions (GH-25443)

This commit is contained in:
Pablo Galindo 2021-04-16 17:12:03 +01:00 committed by GitHub
parent 3b82cae774
commit 0ad81d4db2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 2 deletions

View File

@ -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.

View File

@ -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;