Skip to content

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

Closed

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

Activity

  1. samuelbryant commented on Dec 15, 2019

    @samuelbryant
    Author

    if someone gives me a hint for where in the source code something like this should be implemented, I'd be happy to try and write the patch myself

  2. JelleZijlstra commented on Dec 16, 2019

    @JelleZijlstra
    Member

    This is a duplicate of #7316, so I'll close this one. The fix should be in one of the places I touched in #6899, but I'm not sure exactly where.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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