Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Improving various error messages #135975

Open
@Joeccp

Description

@Joeccp

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions