summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBatuhan Taskaya <isidentical@gmail.com>2022-10-31 13:27:13 (GMT)
committerGitHub <noreply@github.com>2022-10-31 13:27:13 (GMT)
commita41de32942b7ac14524587a08d219f3bfe346415 (patch)
tree4e2588b1dece4bcb370c9c2f5a13a872b77d5575
parent39448adc9db0c0444443a42f13a9d7e1441b88e8 (diff)
downloadcpython-a41de32942b7ac14524587a08d219f3bfe346415.zip
cpython-a41de32942b7ac14524587a08d219f3bfe346415.tar.gz
cpython-a41de32942b7ac14524587a08d219f3bfe346415.tar.bz2
gh-98878: Use builtins from the bound frame when offering a suggestion (#98880)
-rw-r--r--Lib/test/test_traceback.py9
-rw-r--r--Lib/traceback.py2
-rw-r--r--Misc/NEWS.d/next/Library/2022-10-30-22-42-48.gh-issue-98878.fgrykp.rst2
3 files changed, 12 insertions, 1 deletions
diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py
index 56b1687..149d023 100644
--- a/Lib/test/test_traceback.py
+++ b/Lib/test/test_traceback.py
@@ -7,6 +7,7 @@ import sys
import types
import inspect
import importlib
+import builtins
import unittest
import re
import tempfile
@@ -3209,6 +3210,14 @@ class SuggestionFormattingTestBase:
actual = self.get_suggestion(func)
self.assertIn("'ZeroDivisionError'?", actual)
+ def test_name_error_suggestions_from_builtins_when_builtins_is_module(self):
+ def func():
+ custom_globals = globals().copy()
+ custom_globals["__builtins__"] = builtins
+ print(eval("ZeroDivisionErrrrr", custom_globals))
+ actual = self.get_suggestion(func)
+ self.assertIn("'ZeroDivisionError'?", actual)
+
def test_name_error_suggestions_do_not_trigger_for_long_names(self):
def func():
somethingverywronghehehehehehe = None
diff --git a/Lib/traceback.py b/Lib/traceback.py
index 0f0f2b3..cf5f355 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -1035,7 +1035,7 @@ def _compute_suggestion_error(exc_value, tb, wrong_name):
d = (
list(frame.f_locals)
+ list(frame.f_globals)
- + list(frame.f_globals['__builtins__'])
+ + list(frame.f_builtins)
)
if len(d) > _MAX_CANDIDATE_ITEMS:
return None
diff --git a/Misc/NEWS.d/next/Library/2022-10-30-22-42-48.gh-issue-98878.fgrykp.rst b/Misc/NEWS.d/next/Library/2022-10-30-22-42-48.gh-issue-98878.fgrykp.rst
new file mode 100644
index 0000000..e83422a
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2022-10-30-22-42-48.gh-issue-98878.fgrykp.rst
@@ -0,0 +1,2 @@
+Use the frame bound builtins when offering a name suggestion in
+:mod:`traceback` to prevent crashing when ``__builtins__`` is not a dict.