Type is lost after merge with `Union[Any, None]`
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
Bug Report
from typing import Any
def func(d: dict[int, Any]) -> None:
x: int | None
x = d.get(1)
reveal_type(x) # typing is lost -> Union[Any, None]
d.get get's correctly inferred as Any | None. However, merging the existing type int | None with Any | None results in Any | None. I.e. mypy looses the original type information. That is unexpected.
Comparing it to a type merge with just Any:
def f(a: Any) -> None:
x: int | None
x = a
reveal_type(x) # int | None
In this case x retains the type information, as expected.
--
Another example which doesn't rely on dict.get
def g(a: Any | None) -> None:
x: int | None
x = a
reveal_type(x) # typing is lost -> Union[Any, None]
Expected Behavior
Mypy should retain the original type information even after merging it with Any | None.
Your Environment
- Mypy version used: 0.971
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 tres funciones de reproducción del issue y ejecútalas con mypy y reveal_type para confirmar el comportamiento actual. Rastrea la lógica de combinación de tipos y asignación para un valor existente de tipo int | None combinado con Any | None. Se considera terminado cuando el tipo inferido sigue siendo int | None en todos los ejemplos mostrados, con cobertura de regresión para estos casos.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- tooling
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 45/100