type narrowing leads to "unreachable" code being actually reachable
Offen
Dieses Issue hat noch niemand übernommen.
bug
topic-reachability
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug Report
To Reproduce
class Foo:
def foo(self) -> None:
print("Foo!!!")
class Bar:
def __init__(self) -> None:
self.foo: Foo | None = Foo()
def get_rid_of_foo(self) -> None:
self.foo = None
bar = Bar()
if bar.foo is not None:
bar.get_rid_of_foo()
assert bar.foo is None
print(1 + "lol")
Expected Behavior
An error for the obviously wrong print(1 + "lol"). It fails there at runtime.
Actual Behavior
no errors!
Your Environment
mypy 0.942 with --python-version 3.10
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Führe zuerst den Reproducer mit mypy 0.942 und --python-version 3.10 aus und verfolge anschließend, wie sich das Narrowing um bar.foo nach get_rid_of_foo() verhält. Erledigt ist die Aufgabe, wenn mypy den ungültigen Ausdruck 1 + "lol" meldet und dabei das gültige Narrowing-Verhalten beibehält.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 42/100