Skip to content

Wrong unreachable note in finally section #19269

Description

@tyralla

@A5rocks found the following bug when discussing #19118:

deff4() ->None:
whileint():
try:
x=1ifint():
x=""breakifint():
whileint():
ifint():
x=Nonebreakfinally:
ifisinstance(x, str):
print("hello :)") # E: Statement is unreachablereveal_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-unreachabledeff() ->None:
try:
x=1ifint():
x=""returnifint():
x=Nonereturnfinally:
reveal_type(x) # N: Revealed type is "Union[builtins.int, builtins.str, None]" \# N: Revealed type is "builtins.int"ifisinstance(x, str): # E: Subclass of "int" and "str" cannot exist: would have incompatible method signaturesreveal_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"

A first idea on how to fix this.

Metadata

Metadata

Assignees

Labels

bugmypy got something wrongtopic-reachabilityDetecting unreachable code

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions