0Pricing
Python Academy · Lección

Ejecución de mypy y corrección de errores de tipos

Configure mypy, interprete los errores y añada tipos gradualmente a una base de código.

Ejecución de mypy y corrección de errores de tipos es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.

Instalación y ejecución de mypy

Instale mypy con pip y ejecútelo en un archivo o paquete. Informa de los errores de tipos sin ejecutar el código.

# pip install mypy

# Check a single file:
# mypy script.py

# Check a package:
# mypy mypackage/

# Strict mode (recommended for new code):
# mypy --strict script.py

Su primer error de mypy

mypy detecta tipos incompatibles, valores devueltos ausentes y argumentos de funciones sin anotaciones.

# script.py
def add(a, b):   # mypy: Missing type annotation
    return a + b

result: int = add("hello", 1)  # str, not int

# mypy output:
# error: Returning Any from function declared to return "int"

Indicador --strict

--strict habilita muchas comprobaciones adicionales: anotaciones ausentes, uso de Any, importaciones sin tipos, etc. Empiece sin él y añádalo gradualmente.

# Most important strict flags individually:
# --disallow-untyped-defs
# --disallow-any-generics
# --warn-return-any
# --no-implicit-reexport

# Or all at once:
# mypy --strict mypackage/

Ignorar errores

Añada # type: ignore al final de una línea para suprimir un error específico. Úselo con moderación y añada un comentario que explique el motivo.

import third_party  # type: ignore[import]  # no stub available

x: int = get_dynamic_value()  # type: ignore[assignment]

Configuración de mypy.ini / pyproject.toml

Guarde la configuración de mypy en mypy.ini o pyproject.toml para no tener que pasar indicadores en cada ejecución.

# mypy.ini
[mypy]
python_version = 3.11
strict = True
ignore_missing_imports = True

[mypy-third_party.*]
ignore_errors = True

Modo incremental

mypy almacena en caché los resultados entre ejecuciones. Solo se vuelven a comprobar los archivos modificados, por lo que las ejecuciones posteriores son rápidas.

# First run:
# mypy mypackage/   — full analysis, ~5 s

# Second run (nothing changed):
# mypy mypackage/   — Success: no issues in 0 source files (0.3 s)

Error común: tipos incompatibles

El error más frecuente: asignar o pasar un valor del tipo incorrecto.

# error: Incompatible types in assignment
# (expression has type "str", variable has type "int")

count: int = 0
count = "five"   # error

# Fix:
count = 5

Error común: discrepancia en el tipo de argumento

Pasar a una función argumentos con el tipo incorrecto.

def greet(name: str) -> str:
    return f"Hello, {name}"

# error: Argument 1 to "greet" has incompatible type "int"
greet(42)   # error

# Fix:
greet(str(42))

Error común: devolución inesperada de None

Una función declarada para devolver un valor distinto de None, pero que tiene una ruta de código que devuelve None.

# error: Missing return statement
def find(items: list[int], target: int) -> int:
    for item in items:
        if item == target:
            return item
    # Missing: no return if not found!

# Fix:
def find2(items: list[int], target: int) -> int | None:
    for item in items:
        if item == target:
            return item
    return None

Reducción de tipos con isinstance

Use isinstance para reducir un tipo Union dentro de una rama. mypy lo entiende y reduce el tipo.

def process(value: int | str) -> str:
    if isinstance(value, int):
        return str(value * 2)   # mypy knows value is int here
    return value.upper()         # mypy knows value is str here

Uso de cast

typing.cast(Type, value) indica a mypy que trate un valor como un tipo determinado, sin efecto durante la ejecución. Úselo solo cuando tenga más información que mypy.

from typing import cast

def get_value() -> object:
    return 42

result = cast(int, get_value())   # mypy treats result as int
print(result + 1)   # 43

Comprobación rápida

¿Qué ocurre al añadir # type: ignore a una línea?

Repaso

Ejecute mypy script.py para comprobar los tipos. Corrija las asignaciones incompatibles, las discrepancias en los argumentos y los valores devueltos ausentes. Use isinstance para reducir uniones, # type: ignore con moderación y configure mypy en mypy.ini. Habilite --strict gradualmente.

Preguntas frecuentes

¿La lección «Ejecución de mypy y corrección de errores de tipos» es gratis?

Sí — el texto completo de «Ejecución de mypy y corrección de errores de tipos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Ejecución de mypy y corrección de errores de tipos»?

Configure mypy, interprete los errores y añada tipos gradualmente a una base de código. Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Python Academy?

No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Ejecución de mypy y corrección de errores de tipos»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Python Academy?

Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Anotaciones de tipos básicas
  2. Tipos complejos: List, Dict, Optional y Union
  3. TypeVar, clases genéricas y Protocol
  4. Ejecución de mypy y corrección de errores de tipos
← Volver a Python Academy