Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit16e9e74

Browse files
[3.13]gh-132385: Fix instance error suggestions trigger potential exceptions intraceback (GH-132387) (#133297)
gh-132385: Fix instance error suggestions trigger potential exceptions in `traceback` (GH-132387)(cherry picked from commit641253c)Co-authored-by: sobolevn <mail@sobolevn.me>
1 parent6a919d0 commit16e9e74

File tree

3 files changed

+29
-1
lines changed

3 files changed

+29
-1
lines changed

‎Lib/test/test_traceback.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4549,6 +4549,28 @@ def foo(self):
45494549
actual=self.get_suggestion(instance.foo)
45504550
self.assertNotIn("self.blech",actual)
45514551

4552+
deftest_unbound_local_error_with_side_effect(self):
4553+
# gh-132385
4554+
classA:
4555+
def__getattr__(self,key):
4556+
ifkey=='foo':
4557+
raiseAttributeError('foo')
4558+
ifkey=='spam':
4559+
raiseValueError('spam')
4560+
4561+
defbar(self):
4562+
foo
4563+
defbaz(self):
4564+
spam
4565+
4566+
suggestion=self.get_suggestion(A().bar)
4567+
self.assertNotIn('self.',suggestion)
4568+
self.assertIn("'foo'",suggestion)
4569+
4570+
suggestion=self.get_suggestion(A().baz)
4571+
self.assertNotIn('self.',suggestion)
4572+
self.assertIn("'spam'",suggestion)
4573+
45524574
deftest_unbound_local_error_does_not_match(self):
45534575
deffunc():
45544576
something=3

‎Lib/traceback.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1528,7 +1528,11 @@ def _compute_suggestion_error(exc_value, tb, wrong_name):
15281528
# has the wrong name as attribute
15291529
if'self'inframe.f_locals:
15301530
self=frame.f_locals['self']
1531-
ifhasattr(self,wrong_name):
1531+
try:
1532+
has_wrong_name=hasattr(self,wrong_name)
1533+
exceptException:
1534+
has_wrong_name=False
1535+
ifhas_wrong_name:
15321536
returnf"self.{wrong_name}"
15331537

15341538
try:
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix instance error suggestions trigger potential exceptions
2+
in:meth:`object.__getattr__` in:mod:`traceback`.

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp