Incorrect error when argument missing from function call unpacking TypedDict
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 20.6k
- Forks
- 3.3k
- PR merge metrics
- PR metrics pending
Description
Bug Report
When supplying arguments by unpacking a TypedDict, and the TypedDict does not supply all the parameters, mypy seems to treat it as only supplying the first parameter, even if that is the one that is missing.
To Reproduce
from typing import TypedDict
def my_function(foo: int, bar: int) -> None:
pass
class MyTypedDict(TypedDict):
# foo: int
bar: int
a: MyTypedDict = {'bar': 1}
my_function(**a) # mypy - error: Missing positional argument "bar" in call to "my_function"
my_function(bar=1) # mypy - error: Missing positional argument "foo" in call to "my_function"
https://mypy-play.net/?mypy=0.931&python=3.11&flags=strict&gist=c72be0814d2e7684453f2a8825f2e986
Expected Behavior
The line my_function(**a) should result in mypy error error: Missing positional argument "foo" in call to "my_function", as it only supplies bar.
Actual Behavior
The line my_function(**a) resulted in mypy error error: Missing positional argument "bar" in call to "my_function".
When executed, python gave this error:
TypeError: my_function() missing 1 required positional argument: 'foo'
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
Start by running the supplied mypy-play TypedDict and function-unpacking reproducer and compare mypy's diagnostic with Python's TypeError. Trace the handling of **a calls and TypedDict keys, then add coverage showing that the missing argument is foo rather than bar.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 50/100