Open
Description
Hello, when I declare a function that has **kwargs
along with another parameter with a default value, mypy reports errors when trying to call this function without the default argument.
Repro
def foo(option: bool = None, **kwargs):
pass
def bar(option: str = '', **kwargs):
pass
d = {'test': True}
foo(**{'test': True})
foo(**d)
foo(other_option=True, option=True, **d)
foo(option=True, **{'test': True})
bar(**{'test': True}) # Error
bar(**d) # Error
bar(other_option=True, **d) # Error
bar(option='Hello, world!', **{'test': True})
Mypy output:
test.py:15: error: Argument 1 to "bar" has incompatible type "**Dict[str, bool]"; expected "str"
test.py:16: error: Argument 1 to "bar" has incompatible type "**Dict[str, bool]"; expected "str"
test.py:17: error: Argument 2 to "bar" has incompatible type "**Dict[str, bool]"; expected "str"
Found 3 errors in 1 file (checked 1 source file)
Other failing inputs
From my observations: default parameters with {bool, int, float}
types work fine (like the foo
function). But if the default parameter has type of any of the following types:
- Custom classes
- Enums
bytes
str
mypy will report errors.
Expected result
foo
and bar
should behave the same way (e.g. no errors).
Versions
mypy 0.770
and Python 3.8.2
Metadata
Metadata
Assignees
Projects
Milestone
Relationships
Development
No branches or pull requests
Activity