Quand le traitement des exceptions est-il préférable à la vérification des conditions ? Il existe de nombreuses situations où je peux choisir d'utiliser l'un ou l'autre.
Par exemple, voici une fonction de sommation qui utilise une exception personnalisée :
# module mylibrary
class WrongSummand(Exception):
pass
def sum_(a, b):
""" returns the sum of two summands of the same type """
if type(a) != type(b):
raise WrongSummand("given arguments are not of the same type")
return a + b
# module application using mylibrary
from mylibrary import sum_, WrongSummand
try:
print sum_("A", 5)
except WrongSummand:
print "wrong arguments"
Et voici la même fonction, qui évite d'utiliser les exceptions
# module mylibrary
def sum_(a, b):
""" returns the sum of two summands if they are both of the same type """
if type(a) == type(b):
return a + b
# module application using mylibrary
from mylibrary import sum_
c = sum_("A", 5)
if c is not None:
print c
else:
print "wrong arguments"
Je pense que l'utilisation de conditions est toujours plus lisible et plus facile à gérer. Ou ai-je tort ? Quels sont les cas appropriés pour définir des API qui lèvent des exceptions et pourquoi ?