Skip to content

New REPL exits when there are non-string candidates for suggestions #130999

Closed
@devdanzin

Description

@devdanzin

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.13bugs and security fixes3.14bugs and security fixesstdlibPython modules in the Lib dirtopic-replRelated to the interactive shelltype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions