Skip to content

Mypy doesnt do type inference in "walrus" expressions (i.e. := ) #8147

Closed
@samuelbryant

Description

@samuelbryant

I'm running python3.8 and mypy 0.750 and I realized that mypy doesn't do automatic type inference in if expressions involving the walrus operator the way it does with ordinary expressions. Specifically, where mypy would infer that a value is not None after passing an if value is not None expression, the corresponding walrus expression does not work

Example of valid mypy code without the walrus operator:

def method(arg: int):
    pass
int_map: Dict[str, int] = {}    
value = int_map.get(key, None)
if value is not None:
    method(value) # okay

With the walrus operator, the following code should not produce a mypy error:

def method(arg: int):
    pass
int_map: Dict[str, int] = {}    
if (value := int_map.get(key, None)) is not None:
    method(value) # triggers "... has incompatible type Optional[int]"; expected "int"

but it does

Apologies if this is a duplicate

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions