https://github.com/python/cpython/commit/641253cfac789e57c2b0c16047bdbf355535f60f commit: 641253cfac789e57c2b0c16047bdbf355535f60f branch: main author: sobolevn <m...@sobolevn.me> committer: sobolevn <m...@sobolevn.me> date: 2025-05-02T15:52:59+03:00 summary:
gh-132385: Fix instance error suggestions trigger potential exceptions in `traceback` (#132387) files: A Misc/NEWS.d/next/Library/2025-04-11-12-41-47.gh-issue-132385.86HoA7.rst M Lib/test/test_traceback.py M Lib/traceback.py diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index a806dbf1582268..683486e9aca7b2 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -4555,6 +4555,28 @@ def foo(self): actual = self.get_suggestion(instance.foo) self.assertNotIn("self.blech", actual) + def test_unbound_local_error_with_side_effect(self): + # gh-132385 + class A: + def __getattr__(self, key): + if key == 'foo': + raise AttributeError('foo') + if key == 'spam': + raise ValueError('spam') + + def bar(self): + foo + def baz(self): + spam + + suggestion = self.get_suggestion(A().bar) + self.assertNotIn('self.', suggestion) + self.assertIn("'foo'", suggestion) + + suggestion = self.get_suggestion(A().baz) + self.assertNotIn('self.', suggestion) + self.assertIn("'spam'", suggestion) + def test_unbound_local_error_does_not_match(self): def func(): something = 3 diff --git a/Lib/traceback.py b/Lib/traceback.py index 4b3d2b636fc6b5..16ba7fc2ee86fb 100644 --- a/Lib/traceback.py +++ b/Lib/traceback.py @@ -1636,7 +1636,11 @@ def _compute_suggestion_error(exc_value, tb, wrong_name): # has the wrong name as attribute if 'self' in frame.f_locals: self = frame.f_locals['self'] - if hasattr(self, wrong_name): + try: + has_wrong_name = hasattr(self, wrong_name) + except Exception: + has_wrong_name = False + if has_wrong_name: return f"self.{wrong_name}" try: diff --git a/Misc/NEWS.d/next/Library/2025-04-11-12-41-47.gh-issue-132385.86HoA7.rst b/Misc/NEWS.d/next/Library/2025-04-11-12-41-47.gh-issue-132385.86HoA7.rst new file mode 100644 index 00000000000000..9aa2da452d29f6 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2025-04-11-12-41-47.gh-issue-132385.86HoA7.rst @@ -0,0 +1,2 @@ +Fix instance error suggestions trigger potential exceptions +in :meth:`object.__getattr__` in :mod:`traceback`. _______________________________________________ Python-checkins mailing list -- python-checkins@python.org To unsubscribe send an email to python-checkins-le...@python.org https://mail.python.org/mailman3/lists/python-checkins.python.org/ Member address: arch...@mail-archive.com