es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , , ,

Answer

  1. Avatar for 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:

    from typing import Union, List
    
    
    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)
    

    Esto debería hacer que las anotaciones sean compatibles con la función enumerate.

Comments are closed.