Closed
Description
Crash report
What happened?
The new REPL in main will exit if a suggestion would be offered, but there are non-string candidates like below:
>>> import runpy ... runpy._run_module_code("blech", {0: "", "bluch": ""}, "") ... Exception ignored in the internal traceback machinery: Traceback (most recent call last): File "/home/danzin/projects/cpython/Lib/traceback.py", line 139, in _print_exception_bltin return print_exception(exc, limit=BUILTIN_EXCEPTION_LIMIT, file=file, colorize=colorize) File "/home/danzin/projects/cpython/Lib/traceback.py", line 129, in print_exception te = TracebackException(type(value), value, tb, limit=limit, compact=True) File "/home/danzin/projects/cpython/Lib/traceback.py", line 1138, in __init__ context = TracebackException( File "/home/danzin/projects/cpython/Lib/traceback.py", line 1094, in __init__ suggestion = _compute_suggestion_error(exc_value, exc_traceback, wrong_name) File "/home/danzin/projects/cpython/Lib/traceback.py", line 1535, in _compute_suggestion_error return _suggestions._generate_suggestions(d, wrong_name) TypeError: all elements in 'candidates' must be strings Traceback (most recent call last): File "<python-input-0>", line 2, in <module> File "/home/danzin/projects/cpython/Lib/runpy.py", line 98, in _run_module_code _run_code(code, mod_globals, init_globals, File "/home/danzin/projects/cpython/Lib/runpy.py", line 88, in _run_code exec(code, run_globals) File "<string>", line 1, in <module> NameError: name 'blech' is not defined During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/danzin/projects/cpython/Lib/_pyrepl/console.py", line 173, in _excepthook lines = traceback.format_exception( File "/home/danzin/projects/cpython/Lib/traceback.py", line 154, in format_exception te = TracebackException(type(value), value, tb, limit=limit, compact=True) File "/home/danzin/projects/cpython/Lib/traceback.py", line 1094, in __init__ suggestion = _compute_suggestion_error(exc_value, exc_traceback, wrong_name) File "/home/danzin/projects/cpython/Lib/traceback.py", line 1535, in _compute_suggestion_error return _suggestions._generate_suggestions(d, wrong_name) TypeError: all elements in 'candidates' must be strings During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/danzin/projects/cpython/Lib/runpy.py", line 198, in _run_module_as_main return _run_code(code, main_globals, None, File "/home/danzin/projects/cpython/Lib/runpy.py", line 88, in _run_code exec(code, run_globals) File "/home/danzin/projects/cpython/Lib/_pyrepl/__main__.py", line 6, in <module> __pyrepl_interactive_console() File "/home/danzin/projects/cpython/Lib/_pyrepl/main.py", line 59, in interactive_console run_multiline_interactive_console(console) File "/home/danzin/projects/cpython/Lib/_pyrepl/simple_interact.py", line 152, in run_multiline_interactive_console more = console.push(_strip_final_indent(statement), filename=input_name, _symbol="single") # type: ignore[call-arg] File "/home/danzin/projects/cpython/Lib/code.py", line 324, in push more = self.runsource(source, filename, symbol=_symbol) File "/home/danzin/projects/cpython/Lib/_pyrepl/console.py", line 231, in runsource result = self.runcode(code) File "/home/danzin/projects/cpython/Lib/_pyrepl/console.py", line 191, in runcode self.showtraceback() File "/home/danzin/projects/cpython/Lib/code.py", line 128, in showtraceback self._showtraceback(typ, value, tb.tb_next, "") File "/home/danzin/projects/cpython/Lib/code.py", line 144, in _showtraceback self._excepthook(typ, value, tb) File "/home/danzin/projects/cpython/Lib/_pyrepl/console.py", line 179, in _excepthook lines = traceback.format_exception( File "/home/danzin/projects/cpython/Lib/traceback.py", line 154, in format_exception te = TracebackException(type(value), value, tb, limit=limit, compact=True) File "/home/danzin/projects/cpython/Lib/traceback.py", line 1138, in __init__ context = TracebackException( File "/home/danzin/projects/cpython/Lib/traceback.py", line 1094, in __init__ suggestion = _compute_suggestion_error(exc_value, exc_traceback, wrong_name) File "/home/danzin/projects/cpython/Lib/traceback.py", line 1535, in _compute_suggestion_error return _suggestions._generate_suggestions(d, wrong_name) TypeError: all elements in 'candidates' must be strings
This is an offshoot of #129573, where code like above would abort in 3.12.
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Output from running 'python -VV' on the command line:
Python 3.14.0a5+ (heads/main:a3990df6121, Mar 9 2025, 00:02:58) [GCC 13.3.0]
Linked PRs
- gh-130999: Avoid exiting the new REPL when there are non-string candidates for suggestions #131001
- [3.14] gh-130999: Avoid exiting the new REPL when there are non-string candidates for suggestions (gh-131001) #135019
- [3.13] gh-130999: Avoid exiting the new REPL when there are non-string candidates for suggestions (gh-131001) #135020
- gh-130999: Fix globals() poisoning in test_traceback #135030