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