Improving various error messages
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 35.9k
- Métriques de merge des PR
- Métriques de PR en attente
Description
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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
L’issue ne nomme aucun fichier ni test ; commencez par reproduire les exemples de syntaxe indiqués dans Python 3.13.5 et suivre où sont produits leurs messages SyntaxError. Le travail est terminé lorsqu’un accord est trouvé sur les cas soulevés par les questions ouvertes et que les messages proposés sont mis à jour de manière cohérente dans les scénarios indiqués d’expressions étoilées et d’importations.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- compilers
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 35/100