Improving various error messages
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 77.2k
- フォーク
- 35.9k
- PR マージ指標
- PR 指標を取得中
説明
Feature or enhancement
Proposal:
I propose improving the error messages as follows:
Starred expression
In the return type type hint
In Python 3.13.5:
>>> def func() -> *list:
File "<python-input-0>", line 1
def func() -> *list:
^^
SyntaxError: expected ':'
Proposed:
>>> def func() -> *list:
File "<python-input-0>", line 1
def func() -> *list:
^^^^^
SyntaxError: can't use starred expression in the return type type hint
When unpacking to a set
In Python 3.13.5:
>>> {*x, y} = 1, 2
File "<python-input-0>", line 1
{*x, y} = 1, 2
^^^^^^^
SyntaxError: cannot assign to set display here. Maybe you meant '==' instead of '='?
Proposed:
>>> {*x, y} = 1, 2
File "<python-input-0>", line 1
{*x, y} = 1, 2
^^^^^^^
SyntaxError: starred assignment target must be in a list or tuple, not a set. Maybe you meant '==' instead of '='?
In type statement
In Python 3.13.5:
>>> type *Z = int
File "<python-input-0>", line 1
type *Z = int
^^^^^^^
SyntaxError: cannot assign to expression here. Maybe you meant '==' instead of '='?
>>> type Z = *int
File "<python-input-1>", line 1
type Z = *int
^
SyntaxError: invalid syntax
Proposed:
>>> type *Z = int
File "<python-input-0>", line 1
type *Z = int
^^
SyntaxError: cannot use starred expression in a type statement
>>> type Z = *int
File "<python-input-1>", line 1
type Z = *int
^^^^
SyntaxError: cannot use starred expression in a type statement
Assign to None/True/False
In Python 3.13.5:
>>> *None, _ = (1, 2)
File "<python-input-1>", line 1
*None, _ = (1, 2)
^^^^^^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
Proposed:
>>> *None, _ = (1, 2)
File "<python-input-1>", line 1
*None, _ = (1, 2)
^^^^^
SyntaxError: cannot assign to None
(Same for True/False)
import statement
In Python 3.13.5:
>>> from typing import *, Any
File "<python-input-0>", line 1
from typing import *, Any
^
SyntaxError: invalid syntax
Proposed:
>>> from typing import *, Any
File "<python-input-0>", line 1
from typing import *, Any
^^^^^^
SyntaxError: can't use wildcard and identifier at the same time
Open questions:
"You don't need to use a starred expression here"?
In Python 3.13.5:
>>> lst = [1, 2, 3]
>>> a, b, c = *lst
File "<python-input-1>", line 1
a, b, c = *lst
^^^^
SyntaxError: can't use starred expression here
This is a tricky one. In my experience, this exists in many beginner codes, but I don't know how we can improve the error message here. The word "here" is very unclear IMHO.
Inconsistency of error messages
In Python 3.13.5:
>>> for *x in [[0]]: print(x)
File "<python-input-0>", line 1
for *x in [[0]]: print(x)
^^
SyntaxError: starred assignment target must be in a list or tuple
>>> for (*x) in [[0]]: print(x)
File "<python-input-1>", line 1
for (*x) in [[0]]: print(x)
^^
SyntaxError: cannot use starred expression here
I find the above inconsistency a little bit surprising, but I don't have a strong feeling about this.
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
Links to previous discussion of this feature:
No response
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
この issue ではファイルやテストが指定されていないため、まず Python 3.13.5 で記載された構文例を再現し、それらの SyntaxError メッセージがどこで生成されるかを追跡します。完了の条件は、未解決の問いに関するケースについて合意し、記載された starred-expression と import の各シナリオ全体で提案されたメッセージを一貫して更新することです。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- compilers
- issue の種類
- 機能追加
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 35/100