Skip to content

isinstance(x, NoneType) doesn't get checked if the type annotation is None #13154

Closed
@strny0

Description

@strny0

Bug Report

isinstance check of mypy doesn't detect instances of NoneType (actual None), doesn't visit/check branches checked of isinstance() conditions.

Expected Behavior

from types import NoneType

def f(x: str | None):
    if isinstance(x, NoneType):
        reveal_type(x) # N: Revealed type is "None"
    elif isinstance(x, str):
        reveal_type(x) # N: Revealed type is "builtins.str"
    reveal_type(x) # N: Revealed type is "Union[builtins.str, None]"

Actual Behavior

from types import NoneType

def f(x: str | None):
    if isinstance(x, NoneType):
        reveal_type(x)
    elif isinstance(x, str):
        reveal_type(x) # N: Revealed type is "builtins.str"
    reveal_type(x) # N: Revealed type is "Union[builtins.str, None]"

Your Environment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions