False positive unreachable statement after exception raised within context block
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
import contextlib
from typing import Iterator
@contextlib.contextmanager
def context_func() -> Iterator[None]:
try:
yield
except Exception:
pass
def foo() -> None:
with context_func():
raise Exception
print("xxx") # mypy: Statement is unreachable
Since context managers can silence exceptions, I don't think mypy should consider statements after the context to be unreachable due to exceptions which might be raised within the context.
Flags needed: --warn-unreachable.
Python 3.6, mypy 0.770, also master (at 2a3de7b7941f24b6bc53fe0cf8a2b7f8f7fd4e15)
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
Beginne damit, das bereitgestellte Beispiel mit Python und dem Flag --warn-unreachable von mypy auszuführen und die Warnung nach dem Kontextblock mit dem erwarteten Verhalten zu vergleichen. Verfolge mypys Analyse von Ausnahmen, die innerhalb eines Kontextmanagers ausgelöst werden, und überprüfe, dass ein Kontextmanager, der die Ausnahme abfängt, die folgende Anweisung nicht als unerreichbar kennzeichnet.
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
- 45/100