isinstance wrongly narrows away 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
Bug Report
Mypy falsely narrows a type when using isinstance with a tuple containing a variable of type Any.
This only happens when there is at least one other element in the tuple.
Note that a class might have type Any if it is imported from an untyped module.
To Reproduce
from typing import Any
class A:
pass
B: Any # (Or from untyped_lib import B)
m: Any
if isinstance(m, (A, B)):
reveal_type(m)
else:
reveal_type(m)
Expected Behavior
Mypy reports no error. m is of type Any in both branches
Actual Behavior
The second branch is reported as unreachable.
Your Environment
- Mypy version used: 0.931
- Mypy command-line flags: --warn-unreachable
- Mypy configuration options from
mypy.ini(and other config files): None - Python version used: 3.10
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 ejecutando la reproducción proporcionada con mypy 0.931, Python 3.10 y --warn-unreachable; después, sigue la lógica de narrowing de isinstance implicada cuando una tupla contiene Any. Se considera terminado cuando el ejemplo informa de que m es Any en ambas ramas y ya no marca la rama else como inalcanzable.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- compilers, devtools
- 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