• [^] # Re: type: ignore

    Posté par (site web personnel) . En réponse au journal Quel pov' type. Évalué à 5.

    Salut Serge ! J'avais pas vu le nom avant de répondre :)

    Il m'est venu une autre idée :

    import yaml
    SafeLoader: type["PySafeLoader"] | type["CSafeLoader"]
    try:
     from yaml import CSafeLoader
     SafeLoader = CSafeLoader
    except ImportError:
     from yaml import SafeLoader as PySafeLoader
     SafeLoader = PySafeLoader
    y = yaml.load("a: 1", Loader=SafeLoader)
    assert y == {"a": 1}

    Pas de cast ou de type: ignore, et mypy peut vérifier que les opérations que tu fais sur SafeLoader sont valides à la fois avec CSafeLoader et PySafeLoader.

    Clairement c'est pas évident, c'est un exemple où le typage est plus difficile qu'il ne devrait l'être. Mais on pourrait aussi dire : pourquoi donc yaml ne détecte pas tout seul si CSafeLoader est disponible, et force l'utilisateur à faire ces acrobaties :)

    Aussi, la syntaxe blah: typ1 | typ2 est relativement nouvelle (Python 3.10 je crois?), utilise typing.Union[typ1, type2] si tu as un Python plus vieux.