Type refinements are not applied to index expressions
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
Ran into this issue today, I believe mypy is incorrectly flagging this as an error:
from typing import Any, Dict, Optional
def rename_keys(
original_dict: Dict[str, Any], key_mapping: Dict[str, Optional[str]]
) -> Dict[str, Any]:
"""Renames keys in the dictionary using the key_mapping. If the value in key_mapping is None then it will remove the key entirely"""
return {
key_mapping.get(k, k): v
for k, v in original_dict.items()
if k not in key_mapping or key_mapping[k] is not None
}
output from mypy:
/tmp/mypytest.py:8: error: Key expression in dictionary comprehension has incompatible type "Optional[str]"; expected type "str"
if key_mapping.get(k) is None then it would fail the if-statement at the end of the dictionary comprehension and therefore get filtered out
if k is not in key_mapping then k is the result of the expression key_mapping.get(k,k). k can't be None because k comes from the keys of original_dict which has the type Dict[str, Any]
Versions: mypy 0.701, Python 3.7.4
no flags
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
Reproduce el informe con la comprensión de diccionario rename_keys mostrada usando mypy 0.701 y Python 3.7.4. Rastrea cómo se gestionan los refinamientos de tipos para la condición if y la búsqueda indexada, y verifica después que el diagnóstico incompatible Optional[str] se resuelve sin permitir el caso None.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- compilers
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100