Skip to content

Optional strict checking of *args and/or multiple assignment #7408

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
JukkaL opened this issue Aug 29, 2019 · 1 comment
Open

Optional strict checking of *args and/or multiple assignment #7408

JukkaL opened this issue Aug 29, 2019 · 1 comment
Labels
feature needs discussion topic-calls Function calls, *args, **kwargs, defaults

Comments

@JukkaL
Copy link
Collaborator

JukkaL commented Aug 29, 2019

Currently mypy does optimistic checking of *args -- we don't generate error if it could be valid. This seems like a reasonable default, since it avoids false positive errors. However, some users might prefer stricter checking as an option. When this option is enabled, mypy would only allow variable-length (non-Any) *args in a call if the callee also accepts *args.

Example:

def f(a: int) -> None: pass

x = [1, 2]
f(*x)  # Currently accepted, since mypy doesn't know the length of x

PR #7392 relaxed the rules so that we assume that any list *args argument could be empty and thus we don't complain about even if a caller *args argument is only valid when it's empty.

Similarly this option (or a similar option) could reject variable-length rvalues in multiple assignment like this:

x = [1, 2]
a, b, c = x  # Currently accepted

If we'd have support for enabling/disabling specific error codes, these checks could easily be implemented through error codes that are disabled by default.

Refactoring code such as the above (if correct) to pass mypy could be somewhat painful, however. It could be written like this:

def f(a: int, b: int) -> None: pass

def g(x: List[int]) -> None:
    assert len(x) == 2
    f(x[0], x[1])

(Of course, a # type: ignore would also work.)

@ilevkivskyi
Copy link
Member

I agree this may be useful, but I would say it is relatively low priority (as compared to similar issues like annotating **kwargs with a TypedDict).

@JelleZijlstra JelleZijlstra added the topic-calls Function calls, *args, **kwargs, defaults label Mar 19, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature needs discussion topic-calls Function calls, *args, **kwargs, defaults
Projects
None yet
Development

No branches or pull requests

3 participants