[1.20 regression] _Environ.get(key, default) returns str | None when default is an alias to Any
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 20.6k
- Forks
- 3.3k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
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.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con las sobrecargas explícitas de _Environ.get y pop introducidas por el commit 30260ca57 y reproduce el problema con el ejemplo enlazado de mypy-play. Compara el comportamiento en mypy 1.20 y 1.19.1, y verifica después que un alias de Any pasado como valor predeterminado se infiere como Any y no se produce ningún error espurio [arg-type].
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- devtools
- Tipo de issue
- Error
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Estado de actividad
- Tranquilo
- Claridad
- Bastante claro
- Aptitud para principiantes
- 68/100