Supposons dans Python, vous avez une routine qui accepte trois paramètres nommés (comme * ** kwargs), mais tous les deux sur ces trois doivent être remplis. Si un seul est rempli, c'est une erreur. Si tous les trois sont, c'est une erreur. Quel type d'erreur souleveriez-vous? RuntimeError, une exception spécifiquement créée ou autre? P>
6 Réponses :
Je ferais un spécifique. Vous pouvez l'attraper et traiter cette exception spécifique puisqu'il s'agit d'une circonstance particulière que vous avez créée :) p>
Si (comme vous le dites dans l'un des commentaires), il s'agit d'une erreur de programmeur, vous pouvez augmenter AssertionError:
def two(a=None, b=None, c=None): pass
J'utiliserais une valeur ValueError, ou une sous-classe de celui-ci: "Élevé lorsqu'une opération intégrée ou une fonction reçoit un argument qui a le type de bon type mais une valeur inappropriée, et la situation n'est pas décrite par une exception plus précise telle que IndexError. " P>
Passage 3 ou 1 Valeurs Quand exactement 2 sont requis, une valeur inappropriée sera techniquement si vous considérez que tous les arguments un seul tuple ... au moins à mon avis! :) p>
Pourquoi ne pas simplement faire ce que fait python?
Je recommande une exception personnalisée. Comme: Ensuite, vous pouvez Assurez-vous de le documenter dans la docstring pour votre fonction. < / p> p> SOUMETEREEXACTLYTWO CODE> dans votre code. P>
N'oubliez pas que vous pouvez sousclure les classes d'exception intégrées de Python (et alors, je ' d De cette façon, tout appelant qui est au courant de ce paquet peut attraper typeError code> serait sûrement la bonne classe d'exception intégrée à augmenter ici - c'est ce que Python augmente si le nombre d'arguments ne fait pas Faites correspondre la signature, dans des cas normaux sans
* A code> ou
** k code> dans la signature). J'aime avoir chaque colis définir sa propre erreur
une erreur de classe (exception) code>, puis des exceptions spécifiques selon les besoins peuvent multiplier hériter le cas échéant, par exemple:
élever des erreurs d'erreur code> lorsque je détecte une situation aussi problématique. p>
thippackage.error code>, si elles Nécessité de faire face à toute erreur spécifique à l'emballage, tandis que d'autres appelants (probablement plus élevés dans la chaîne d'appels) Catch toujours le plus générique
typeError code> pour traiter les erreurs telles que "mauvais nombre d'arguments utilisés dans un appel de la fonction ". p> p>
C'est un bel exemple d'utilisation de multiples héritages bien. Merci.