Configuración de MyPy para validación estática de tipos en Python
Clase 4 de 17 • Curso de Python Profesional: Arquitectura de Proyectos, Entornos y PyPI
MyPy es la herramienta estándar en Python para validación estática de tipos: detecta errores antes de ejecutar el código, mejora la calidad y refuerza la mantenibilidad. Aquí verás cómo configurarla en Platzi News, interpretar sus mensajes, corregir tipados reales y generar un reporte HTML para tu equipo.
¿Qué es MyPy y por qué mejora la validación estática de tipos en Python?
MyPy permite encontrar incompatibilidades de tipos sin correr la aplicación. Con esto, el código se vuelve más robusto, fácil de mantener y confiable en equipos grandes. La clave: leer el error, entender el contexto y aplicar el tipado correcto.
- Detecta errores antes de tiempo y evita bugs en producción.
- Ayuda a documentar contratos de funciones y estructuras.
- Acelera el refactor con confianza.
- Permite reportes para ver cobertura de tipado por archivo.
¿Cómo instalar y ejecutar MyPy en Platzi News?
Primero se instala como dependencia de desarrollo y luego se ejecuta sobre el directorio de código fuente para ver los errores detectados.
¿Cómo instalar MyPy y los tipos para requests?
- Instala MyPy como dev dependency.
v add --dev mypy
- Si usas requests sin tipados, instala los stubs para eliminar el error de “Stub not installed”.
v add --dev types-requests
¿Cómo ejecutar el análisis y leer los errores de tipos?
- Corre MyPy sobre el código fuente.
mypy src
- Interpreta el resultado: archivo, dos puntos, número de línea y descripción del problema.
- Ten en cuenta que versiones cambian y los mensajes pueden variar; lo importante es interpretar el tipo esperado vs. el recibido.
¿Cómo solucionar errores comunes y generar reportes HTML?
A continuación, ajustes reales de tipado, mejoras a parámetros y una forma de ignorar validaciones puntuales cuando conoces la intención del código.
¿Cómo tipar params compatibles en requests.get?
El error indica que params no coincide con la firma esperada. La causa: una clave como api_key con tipo desconocido. Solución: tipar el diccionario para que las llaves sean strings y los valores sean string o int.
- Versión con typing clásico.
from typing import Union
params: dict[str, Union[str, int]] = {
"query": query,
"api_key": api_key,
}
- Versión moderna y más legible (operador |).
params: dict[str, str | int] = {
"query": query,
"api_key": api_key,
}
Notas clave: - dict[str, …] tipa las llaves como strings. - str | int asegura compatibilidad con la firma de requests. - Quitar int mostrará un error inmediato si algún valor es entero.
Al volver a ejecutar MyPy, el error desaparece cuando el tipo es compatible.
¿Cómo ignorar validaciones puntuales con type: ignore?
Cuando la intención del código es válida pero choca con una regla, puedes ignorar solo esa línea con el motivo específico.
settings = Settings() # type: ignore[call-arg]
Buenas prácticas: - Usa comentarios de ignore solo cuando entiendas el mensaje. - Documenta el motivo con el código de error entre corchetes. - Evita ignorar bloques completos; sé específico a la línea.
¿Cómo corregir join cuando la lista no es de strings?
La función join requiere un iterable de strings. Si hay enteros mezclados, convierte cada elemento a string antes de unir.
msg = ", ".join(str(x) for x in missing_keys)
- Garantiza que join reciba siempre lista de strings.
- Evita errores del tipo “no se puede asignar al parámetro iterable[str]”.
Al limpiar y ejecutar de nuevo, MyPy puede mostrar el mensaje esperado:
Éxito: no hay issues encontrados en dieciséis archivos analizados.
¿Cómo generar un reporte HTML de cobertura de tipos?
Para compartir con el equipo qué archivos y líneas están tipados, genera un reporte HTML.
- Instala la dependencia requerida.
v add --dev lxml
- Genera el reporte en una carpeta.
mypy src --html-report mypy_report
- Abre el index del reporte y revisa precisión por archivo y líneas tipadas.
Alternativas útiles: - Pyright (Microsoft): integración ágil con Visual Studio Code y feedback al pasar el mouse. - Ty (Astral): promete más rapidez; estado prealfa, no apto para producción todavía.
¿Tienes otra estrategia de tipado o reglas favoritas para MyPy? Compártelas en comentarios y cuéntanos cómo te ha funcionado en tu flujo de trabajo.