python / python/mypy

Poor inference of dict literal when dict type is unioned with certain types

Abierto
#15,217 0 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

bug topic-join-v-union
Lenguaje dominante
Python
Estrellas
20.6k
Forks
3.3k
Métricas de merge de PR
Métricas de PR pendientes

Descripción

Bug Report

To Reproduce

https://mypy-play.net/?mypy=master&python=3.11&gist=5cf1ab002a6dc63c5013fa0f6a00ba4d

Expected Behavior
I expect the dict literal to be inferred as dict[str, str |int] when passed to both foo and bar

Actual Behavior
It's inferred as dict[str, object] when passed to foo, which causes a false positive.

Note that the inference depends on the type you union the dict with. E.g. if you replace Iterable[tuple[str] with list[tuple[str]] you get the expected inference.

Your Environment

  • Mypy version used: Tried 1.0.0, 1.0.1, 1.1.1, 1.2.0 and master in the playground, all have the same behavior
  • Mypy command-line flags: See playground
  • Mypy configuration options from mypy.ini (and other config files): See playground
  • Python version used: 3.11

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con el ejemplo enlazado de mypy playground usando Python 3.11 y las versiones indicadas para reproducir la inferencia diferente para foo y bar. Traza el comportamiento de la inferencia de literales de dict para uniones que involucren Iterable[tuple[str]] y list[tuple[str]]. Se considera terminado cuando el dict se infiere como dict[str, str | int] en ambas llamadas y una prueba de regresión cubre el caso.

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
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
38/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.