Open
Description
@A5rocks found the following bug when discussing #19118:
def f4() -> None:
while int():
try:
x = 1
if int():
x = ""
break
if int():
while int():
if int():
x = None
break
finally:
if isinstance(x, str):
print("hello :)") # E: Statement is unreachable
reveal_type(x) # N: Revealed type is "Union[builtins.int, builtins.str, None]
This bug does not need a loop and hence can be simplified to:
# Mypy 1.16.0
# --allow-redefinition-new --local-partial-types --warn-unreachable
def f() -> None:
try:
x = 1
if int():
x = ""
return
if int():
x = None
return
finally:
reveal_type(x) # N: Revealed type is "Union[builtins.int, builtins.str, None]" \
# N: Revealed type is "builtins.int"
if isinstance(x, str): # E: Subclass of "int" and "str" cannot exist: would have incompatible method signatures
reveal_type(x) # E: Statement is unreachable \
# E: Revealed type is "builtins.str"
reveal_type(x) # N: Revealed type is "Union[builtins.int, builtins.str, None]" \
# N: Revealed type is "builtins.int"