Improving various error messages
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
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
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Das Issue nennt keine Dateien oder Tests; beginne damit, die aufgeführten Syntaxbeispiele in Python 3.13.5 zu reproduzieren und nachzuverfolgen, wo deren SyntaxError-Meldungen erzeugt werden. Als erledigt gilt die Einigung auf die Fälle der offenen Fragen und die konsistente Aktualisierung der vorgeschlagenen Meldungen in den aufgeführten Szenarien zu Sternchenausdrücken und Importen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- compilers
- Issue-Typ
- Feature
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100