111 votes

Indication des types en Python avec exceptions

J'ai une fonction qui ressemble à ceci :

def check_for_errors(result):
    if 'success' in result:
        return True

    if 'error' in result:
        raise TypeError

    return False

En cas d'exécution réussie de cette fonction, je devrais obtenir une bool mais s'il y a une erreur, je devrais recevoir une TypeError - ce qui n'est pas grave car je m'en occupe dans une autre fonction.

La première ligne de ma fonction ressemble à ceci :

def check_for_errors(result: str) -> bool:

Ma question est la suivante : dois-je mentionner l'erreur dans mes indications de type ?

139voto

Martijn Pieters Points 271458

Les indications de type ne peuvent rien dire sur les exceptions. Elles sont totalement hors de portée de cette fonctionnalité. Vous pouvez néanmoins documenter l'exception dans la docstring.

De PEP 484 -- Conseils sur les types :

Exceptions

Aucune syntaxe pour lister les exceptions explicitement soulevées n'est proposée. Actuellement, le seul cas d'utilisation connu pour cette fonctionnalité est documentaire, auquel cas la recommandation est de mettre cette information dans une chaîne de caractères.

Guido van Rossum s'est fortement opposé à l'ajout d'exceptions à la spécification de l'indication du type, car il ne veut pas se retrouver dans une situation où les exceptions doivent être vérifié (géré dans le code d'appel) ou déclarés explicitement à chaque niveau.

4 votes

Ou le cas d'utilisation consistant à vérifier que vous ne générez pas implicitement des exceptions bizarres auxquelles les gens ne s'attendent pas.

3 votes

@ErikAronesty : Définissez bizarre . Tout code peut soulever MemoryError et la plupart des codes peuvent augmenter KeyboardInterrupt . Un bon linter peut vous aider à mieux comprendre les exceptions que les indications de type.

1 votes

Et que se passe-t-il si une exception est renvoyée, et non levée ? Par exemple, NotImplemented peut être renvoyé.

11voto

Jim Wright Points 4402

Il est généralement judicieux de documenter l'erreur. Ainsi, un autre développeur utilisant votre fonction sera en mesure de traiter vos erreurs sans avoir à lire votre code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X