[1.20 regression] _Environ.get(key, default) returns str | None when default is an alias to Any
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
Since mypy 1.20, passing a value whose type is an alias to Any (e.g. Incomplete: TypeAlias = Any) as the default argument of os.environ.get causes mypy to infer str | None instead of Any, producing a spurious [arg-type] error at the use site.
Reproducer: https://mypy-play.net/?gist=7a79f64ac9733542b571cc358f6d3165
import os
from pathlib import Path
from typing import Any
from typing_extensions import TypeAlias
Incomplete: TypeAlias = Any
A: Incomplete = Path()
reveal_type(A) # Any (good)
B = os.environ.get('TEST', A)
reveal_type(B) # str | None (bad) (expected: Any)
C = Path(B) # error: Argument 1 to "Path" has incompatible
# type "str | None"; expected "str | PathLike[str]"
Bisected to 30260ca57 which added explicit _Environ.get/pop overloads where the first overload is def get(self, key, default: None = None) -> AnyStr | None. Before that sync, _Environ inherited Mapping.get, whose first overload took no default argument, so 2-arg calls couldn't match it.
Versions: broken on mypy ≥ 1.20.0; works on mypy ≤ 1.19.1.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia dagli overload espliciti di _Environ.get e pop introdotti dal commit 30260ca57 e riproduci il problema con l’esempio mypy-play collegato. Confronta il comportamento con mypy 1.20 e 1.19.1, quindi verifica che un alias di Any passato come valore predefinito venga inferito come Any e che non si verifichi alcun errore [arg-type] spurio.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- devtools
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Tranquilla
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 68/100