[3.13] gh-132385: Fix instance error suggestions trigger potential exceptions in traceback (GH-132387) (#133297)

gh-132385: Fix instance error suggestions trigger potential exceptions in `traceback` (GH-132387)
(cherry picked from commit 641253cfac)

Co-authored-by: sobolevn <mail@sobolevn.me>
This commit is contained in:
Miss Islington (bot) 2025-05-02 15:27:54 +02:00 committed by GitHub
parent 6a919d0488
commit 16e9e74a8b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 29 additions and 1 deletions

View file

@ -4549,6 +4549,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

View file

@ -1528,7 +1528,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:

View file

@ -0,0 +1,2 @@
Fix instance error suggestions trigger potential exceptions
in :meth:`object.__getattr__` in :mod:`traceback`.