bonjour
C'est une très bonne pratique, mais il faut savoir quand/comment l'utiliser.
On a tous commencé avec ton exemple mais il n'est pas représentatif de la puissance des exceptions.
première chose : On n'est pas obligé de lever une exception immédiatement comme ton exemple (ici, un if peut parfois être aussi efficace)
une exception va être transmise au code en amont et ici, cela peut être très utile.
puisque ton peuso est SQL...
1 2 3 4
| try:
sql_sauvegarde_tout_transaction(x,y,z) # ma fonction complexe qui elle, ne lève aucune exception
except SqlException:
rollback() |
Une exception n'est pas obligatoirement une erreur, parfois, on peut utiliser ce système pour donner des infos en amont (dans le code).
Il ne faut pas oublier que l'on peut aussi lancer des exceptions ! Et, en plus, nous pouvons créer nos propres Exceptions
if len(sys.argv) <1: raise valueError("Il faut au moins passer un paramètre")
# Créer une exception "ExceptionMoinsDe18Ans"
1 2 3 4 5 6
| try:
datas = saisie_utilisateur() # exception créée dans une "sous" fonction de celle ci
except ExceptionMoinsDe18Ans:
print("Attention, il faut en plus ....")
faire_une_chose_particulière(datas)
# peut-être plus simple que de créer 36 "if datas.age <18" dans notre application (pour une, NON) |
Même chose, avec la création de nos propres exceptions Alerte...Critique (exemple trop basique ici pour être forcément pertinent, mais donne bien l'idée)
Reste à voir si c'est bien à prendre_des_mesures() ou une de ces sous-fonctions de déterminer ce qui est une Alerte ou une erreur ...
1 2 3 4 5 6
| try:
datas = prendre_des_mesures()
except TemperatureWarm as alerte:
log(temp, alerte)
except TemperatureCritique:
raise |
------------
Plus proche de la question originelle, depuis python 3.11 nous avons en plus la pep 654 : pas pour intercepter, mais pour déclencher un groupe d'exceptions.
Partager