REPLs don't handle `SystemError` from the compiler
未關閉
@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:
- 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
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
評估
這個 Issue 還沒有評估資料。