diff options
author | Pablo Galindo Salgado <Pablogsal@gmail.com> | 2021-07-16 20:58:21 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-16 20:58:21 (GMT) |
commit | 6714dec5e104bdee4a0ed4d9966de27d1bfa1e3d (patch) | |
tree | b243c5db97cf18198e8a080e400edd9b06c34f03 | |
parent | c90c591e5158ab7b531dcd6e2a5f00bc70ba7637 (diff) | |
download | cpython-6714dec5e104bdee4a0ed4d9966de27d1bfa1e3d.zip cpython-6714dec5e104bdee4a0ed4d9966de27d1bfa1e3d.tar.gz cpython-6714dec5e104bdee4a0ed4d9966de27d1bfa1e3d.tar.bz2 |
bpo-44655: Don't include suggestions for attributes that are the same as the missing one (GH-27197)
-rw-r--r-- | Lib/test/test_exceptions.py | 12 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2021-07-16-20-25-37.bpo-44655.I3wRjL.rst | 2 | ||||
-rw-r--r-- | Python/suggestions.c | 3 |
3 files changed, 17 insertions, 0 deletions
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py index 2b00147..31051d4 100644 --- a/Lib/test/test_exceptions.py +++ b/Lib/test/test_exceptions.py @@ -1916,6 +1916,18 @@ class AttributeErrorTests(unittest.TestCase): self.assertIn("blech", err.getvalue()) + def test_getattr_suggestions_for_same_name(self): + class A: + def __dir__(self): + return ['blech'] + try: + A().blech + except AttributeError as exc: + with support.captured_stderr() as err: + sys.__excepthook__(*sys.exc_info()) + + self.assertNotIn("Did you mean", err.getvalue()) + def test_attribute_error_with_failing_dict(self): class T: bluch = 1 diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-07-16-20-25-37.bpo-44655.I3wRjL.rst b/Misc/NEWS.d/next/Core and Builtins/2021-07-16-20-25-37.bpo-44655.I3wRjL.rst new file mode 100644 index 0000000..4ea4a6d --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2021-07-16-20-25-37.bpo-44655.I3wRjL.rst @@ -0,0 +1,2 @@ +Don't include a missing attribute with the same name as the failing one when +offering suggestions for missing attributes. Patch by Pablo Galindo diff --git a/Python/suggestions.c b/Python/suggestions.c index 3dfcbfe..77bdb6c 100644 --- a/Python/suggestions.c +++ b/Python/suggestions.c @@ -151,6 +151,9 @@ calculate_suggestions(PyObject *dir, if (item_str == NULL) { return NULL; } + if (PyUnicode_CompareWithASCIIString(name, item_str) == 0) { + continue; + } // No more than 1/3 of the involved characters should need changed. Py_ssize_t max_distance = (name_size + item_size + 3) * MOVE_COST / 6; // Don't take matches we've already beaten. |