59 votes

Exception appropriée à lever si None rencontré comme argument

Quelle est la classe d'exception "correcte" à lever lorsqu'une de mes fonctions détecte None passés lorsqu'une valeur d'argument est requise ? Par exemple:

  def MyFunction(MyArg1, MyArg2):

     if not MyArg2:
          raise ?Error?

Je pense avoir vu TypeError utilisé ici (et il est vrai que je reçois un NoneType là où un autre type est attendu) mais cela ne me semble pas tout à fait correct pour cette situation où je pense que l'exception pourrait être plus explicite.

4voto

SiL3NC3 Points 419

Qu'en est-il de la création et de l'utilisation d'une simple NoneException personnalisée : (peut-être que cela vaut ses 2 lignes de code)

 class NoneError(Exception):
    pass

raise NoneError("Object not constructed. Cannot access a 'None' object.")

Voir la documentation Python : https://pythonbasics.org/try-except/#User-defined-Exceptions

3voto

Michael J. Barber Points 12837

Comme d'autres l'ont noté, TypeError ou ValueError seraient naturels. Si cela ne semble pas assez spécifique, vous pouvez sous-classer l'une des deux exceptions qui convient le mieux. Cela permet une gestion cohérente des arguments invalides pour une large classe de fonctions tout en vous donnant également plus de détails pour la fonction particulière.

3voto

Abhijit Points 24122

La plupart des fonctions python lèvent TypeError si None est passé en argument. Prenez n'importe quelle fonction, disons chr(None) et voyez qu'elle augmente TypeError .

1voto

Spencer Rathbun Points 6171

Utilisez simplement assert :

 assert type(MyArg2) == int

Ou bien:

 assert type(MyArg2) != None

Cela empêchera quelqu'un de vous transmettre le mauvais type, ainsi que de traiter le problème Aucun. Il renverra un AssertionError , selon la documentation.

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