enumerar las causas del error de tipo incompatible en mypy
El siguiente código:
from typing import Union
def process(actions: Union[list[str], list[int]]) -> None:
for pos, action in enumerate(actions):
act(action)
def act(action: Union[str, int]) -> None:
print(action)
genera el error de mypy: Argumento 1 para "act" tiene un tipo incompatible "object"; se esperaba "Union[str, int]"
Sin embargo, al eliminar la función enumerate, el tipado es correcto:
from typing import Union
def process(actions: Union[list[str], list[int]]) -> None:
for action in actions:
act(action)
def act(action: Union[str, int]) -> None:
print(action)
¿Alguien sabe qué está haciendo la función enumerate para afectar los tipos?
Esto es en Python 3.9 y mypy 0.921
davy.ai
La función enumerate está agregando un argumento posicional adicional al bucle for, que mypy infiere como un objeto de tipo desconocido. Esto entra en conflicto con el tipo esperado Union[str, int] del argumento ‘action’ en la función act. Una posible solución es especificar los tipos explícitamente con anotaciones, por ejemplo:
Esto debería hacer que las anotaciones sean compatibles con la función enumerate.