REPLs don't handle `SystemError` from the compiler
Aperta
@johnslavik ci sta già lavorando.
Dal 1/6/2026.
3.14
3.15
3.16
stdlib
topic-repl
type-bug
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 35.9k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Bug report
Bug description:
During investigating #150700 I found that running the snippet class X: [(lambda: __class__)() for () in ()] causes the following bugs to appear:
- The REPL leaks
_IncompleteInputError, which aborts writing the user input to history - The user input isn't shown;
Tracebackis shown immediately after the prompt string>>>
❯ ./python.exe
Python 3.16.0a0 (heads/gh-143535-singledispatchmethod-dispatches-on-first-argument:fad06746051, M) [Clang 17.0.0 (clang-1700.6.3.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> Traceback (most recent call last):r () in ()]
File "/Users/bartosz.slawecki/Python/cpython/Lib/codeop.py", line 64, in _maybe_compile
compiler(source, filename, symbol, flags=flags)
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/bartosz.slawecki/Python/cpython/Lib/codeop.py", line 117, in __call__
codeob = compile(source, filename, symbol, flags, True)
File "<stdin>", line 1
class X: [(lambda: __class__)() for () in ()]
^
_IncompleteInputError: incomplete input
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/bartosz.slawecki/Python/cpython/Lib/_pyrepl/readline.py", line 406, in multiline_input
return reader.readline()
~~~~~~~~~~~~~~~^^
File "/Users/bartosz.slawecki/Python/cpython/Lib/_pyrepl/reader.py", line 1021, in readline
self.handle1()
~~~~~~~~~~~~^^
File "/Users/bartosz.slawecki/Python/cpython/Lib/_pyrepl/reader.py", line 1004, in handle1
self.do_cmd(cmd)
~~~~~~~~~~~^^^^^
File "/Users/bartosz.slawecki/Python/cpython/Lib/_pyrepl/reader.py", line 924, in do_cmd
command.do()
~~~~~~~~~~^^
File "/Users/bartosz.slawecki/Python/cpython/Lib/_pyrepl/readline.py", line 297, in do
r.more_lines is not None and r.more_lines(text)
~~~~~~~~~~~~^^^^^^
File "/Users/bartosz.slawecki/Python/cpython/Lib/_pyrepl/simple_interact.py", line 85, in _more_lines
code = console.compile(src, "<stdin>", "single")
File "/Users/bartosz.slawecki/Python/cpython/Lib/codeop.py", line 154, in __call__
return _maybe_compile(self.compiler, source, filename, symbol, flags=self.compiler.flags)
File "/Users/bartosz.slawecki/Python/cpython/Lib/codeop.py", line 67, in _maybe_compile
compiler(source + "\n", filename, symbol, flags=flags)
~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/bartosz.slawecki/Python/cpython/Lib/codeop.py", line 117, in __call__
codeob = compile(source, filename, symbol, flags, True)
SystemError: compiler_lookup_arg(name='__class__') with reftype=5 failed in X; freevars of code <lambda>: ('__class__',)
I believe SystemError should be handled.
CPython versions tested on:
3.14, 3.15, 3.16, CPython main branch
Operating systems tested on:
macOS
Linked PRs
- gh-151480
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Valutazione
Questa issue non è ancora stata valutata.