From: sobolevn Date: Fri, 2 May 2025 12:52:59 +0000 (+0300) Subject: gh-132385: Fix instance error suggestions trigger potential exceptions in `traceback... X-Git-Tag: v3.14.0b1~123 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=641253cfac789e57c2b0c16047bdbf355535f60f;p=thirdparty%2FPython%2Fcpython.git gh-132385: Fix instance error suggestions trigger potential exceptions in `traceback` (#132387) --- diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index a806dbf15822..683486e9aca7 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -4555,6 +4555,28 @@ class SuggestionFormattingTestBase: 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 4b3d2b636fc6..16ba7fc2ee86 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 000000000000..9aa2da452d29 --- /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`.