https://github.com/python/cpython/commit/641253cfac789e57c2b0c16047bdbf355535f60f
commit: 641253cfac789e57c2b0c16047bdbf355535f60f
branch: main
author: sobolevn <[email protected]>
committer: sobolevn <[email protected]>
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 -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]