python / python/cpython

REPLs don't handle `SystemError` from the compiler

未关闭
#150,732 0 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

@johnslavik 已经在做这个了。

开始于 2026年6月1日。

3.14 3.15 3.16 stdlib topic-repl type-bug
主要语言
Python
星标
77.2k
派生
35.9k
PR 合并指标
PR 指标待抓取

描述

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:

  1. The REPL leaks _IncompleteInputError, which aborts writing the user input to history
  2. The user input isn't shown; Traceback is 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

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。