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