REPL exits with traceback when str(sys.ps1) raises
オープン
まだ誰も着手していません。
stdlib
topic-repl
type-bug
- 主要言語
- Python
- スター
- 77.2k
- フォーク
- 35.9k
- PR マージ指標
- PR 指標を取得中
説明
Bug report
Bug description:
Subject says it all. This is on the latest HEAD of main.
~/cpython$ g pull
Already up to date.
~/cpython$ make
Checked 112 modules (34 built-in, 78 shared, 0 n/a on macosx-14.6-x86_64, 0 disabled, 0 missing, 0 failed on import)
./python.exe -E ./Tools/build/generate-build-details.py `cat pybuilddir.txt`/build-details.json
~/cpython$ ./python.exe
Python 3.14.0a5+ (heads/main:ab11c097052, Feb 28 2025, 08:56:47) [Clang 16.0.0 (clang-1600.0.26.6)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> class C:
... def __str__(self): 1/0
...
>>> sys.ps1 = C()
Traceback (most recent call last):
File "<frozen runpy>", line 198, in _run_module_as_main
File "<frozen runpy>", line 88, in _run_code
File "/Users/guido/cpython/Lib/_pyrepl/__main__.py", line 6, in <module>
__pyrepl_interactive_console()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/Users/guido/cpython/Lib/_pyrepl/main.py", line 59, in interactive_console
run_multiline_interactive_console(console)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/guido/cpython/Lib/_pyrepl/simple_interact.py", line 143, in run_multiline_interactive_console
statement = multiline_input(more_lines, ps1, ps2)
File "/Users/guido/cpython/Lib/_pyrepl/readline.py", line 389, in multiline_input
return reader.readline()
~~~~~~~~~~~~~~~^^
File "/Users/guido/cpython/Lib/_pyrepl/reader.py", line 796, in readline
self.prepare()
~~~~~~~~~~~~^^
File "/Users/guido/cpython/Lib/_pyrepl/historical_reader.py", line 306, in prepare
super().prepare()
~~~~~~~~~~~~~~~^^
File "/Users/guido/cpython/Lib/_pyrepl/reader.py", line 643, in prepare
self.calc_screen()
~~~~~~~~~~~~~~~~^^
File "/Users/guido/cpython/Lib/_pyrepl/completing_reader.py", line 261, in calc_screen
screen = super().calc_screen()
File "/Users/guido/cpython/Lib/_pyrepl/reader.py", line 371, in calc_screen
prompt = self.get_prompt(ln, ll >= pos >= 0)
File "/Users/guido/cpython/Lib/_pyrepl/historical_reader.py", line 326, in get_prompt
return super().get_prompt(lineno, cursor_on_line)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/guido/cpython/Lib/_pyrepl/reader.py", line 552, in get_prompt
prompt = f"{ANSIColors.BOLD_MAGENTA}{prompt}{ANSIColors.RESET}"
^^^^^^^^
File "<python-input-1>", line 2, in __str__
def __str__(self): 1/0
~^~
ZeroDivisionError: division by zero
~/cpython$
Probably @pablogsal should look into this.
CPython versions tested on:
CPython main branch
Operating systems tested on:
macOS
Linked PRs
- gh-131110
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
報告に示されている対話型コマンドで失敗を再現し、次に Lib/_pyrepl/reader.py から始めて、traceback に記載されている関連する _pyrepl ファイルをたどりながら get_prompt を追跡してください。開始する前にリンクされている PR gh-131110 を確認してください。str(sys.ps1) からの例外によって REPL が traceback とともに終了しなくなれば完了です。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- cli
- issue の種類
- バグ
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 活発さ
- 停滞
- 明瞭さ
- 明確に書かれている
- 初心者へのやさしさ
- 25/100