warn-unreachable false-positive when method updates attribute after assert
Offen
Dieses Issue hat noch niemand übernommen.
bug
topic-reachability
topic-type-narrowing
- Vorherrschende Sprache
- Python
- Sterne
- 20.6k
- Forks
- 3.3k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Consider the following code:
from dataclasses import dataclass
@dataclass
class Foo:
value: int
modified: bool = False
def update(self) -> None:
self.value += 1
self.modified = True
foo = Foo(42)
assert not foo.modified
foo.update()
assert foo.modified
print("Reached")
When this is run, the print("Reached") line is reached, but mypy doesn't seem to realize that. Running mypy --warn-unreachable --pretty on the above code gives:
unreachable03.py:18: error: Statement is unreachable
print("Reached")
^
Found 1 error in 1 file (checked 1 source file)
Your Environment
- Mypy version used: both v0.931 and the GitHub version as of commit 48d810d5ed25f898d4f220a7476b6b267c289b9a
- Mypy command-line flags:
--warn-unreachable --pretty - Mypy configuration options from
mypy.ini(and other config files): none - Python version used: 3.9.9
- Operating system and version: macOS 11.6
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
Reproduziere den Bericht mit dem bereitgestellten dataclass-Beispiel unter Verwendung von mypy --warn-unreachable --pretty, und verfolge anschließend die Analyse des unerreichbaren Codes rund um die beiden Assertions und foo.update(). Füge einen Regressionstest für dieses Beispiel hinzu und überprüfe, dass print("Reached") nicht mehr als unerreichbar gemeldet wird.
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