Improving various error messages
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 77.2k
- Forks
- 35.9k
- PR merge metrics
- PR metrics pending
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
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
The issue names no files or tests; start by reproducing the listed syntax examples in Python 3.13.5 and tracing where their SyntaxError messages are produced. Done means agreeing on the open-question cases and updating the proposed messages consistently across the listed starred-expression and import scenarios.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100