REPLs don't handle `SystemError` from the compiler
Ouverte
@johnslavik y travaille déjà.
Depuis le 1/6/2026.
3.14
3.15
3.16
stdlib
topic-repl
type-bug
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Évaluation
Cette issue n'a pas encore été évaluée.