diff options
author | Batuhan Taskaya <isidentical@gmail.com> | 2022-10-31 13:27:13 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-31 13:27:13 (GMT) |
commit | a41de32942b7ac14524587a08d219f3bfe346415 (patch) | |
tree | 4e2588b1dece4bcb370c9c2f5a13a872b77d5575 | |
parent | 39448adc9db0c0444443a42f13a9d7e1441b88e8 (diff) | |
download | cpython-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.py | 9 | ||||
-rw-r--r-- | Lib/traceback.py | 2 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2022-10-30-22-42-48.gh-issue-98878.fgrykp.rst | 2 |
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. |