Gestion des exceptions Python à l'aide de l'instruction try, except et finally
Gestion des exceptions Python à l'aide des instructions try, except et finally
Dans ce didacticiel, vous apprendrez à gérer les exceptions dans votre programme Python à l'aide des instructions try, except et finally à l'aide d'exemples.
Vidéo :Gestion des exceptions Python (essayez..sauf..enfin)
Exceptions en Python
Python a de nombreuses exceptions intégrées qui sont déclenchées lorsque votre programme rencontre une erreur (quelque chose dans le programme tourne mal).
Lorsque ces exceptions se produisent, l'interpréteur Python arrête le processus en cours et le transmet au processus appelant jusqu'à ce qu'il soit traité. S'il n'est pas géré, le programme plantera.
Par exemple, considérons un programme où nous avons une fonction A
qui appelle la fonction B
, qui à son tour appelle la fonction C
. Si une exception se produit dans la fonction C
mais n'est pas géré dans C
, l'exception passe à B
puis à A
.
S'il n'est jamais traité, un message d'erreur s'affiche et notre programme s'arrête soudainement et de manière inattendue.
Récupérer les exceptions en Python
En Python, les exceptions peuvent être gérées à l'aide d'un try
déclaration.
L'opération critique qui peut lever une exception est placée à l'intérieur du try
clause. Le code qui gère les exceptions est écrit dans le except
clause.
Nous pouvons ainsi choisir les opérations à effectuer une fois que nous avons intercepté l'exception. Voici un exemple simple.
# import module sys to get the type of exception
import sys
randomList = ['a', 0, 2]
for entry in randomList:
try:
print("The entry is", entry)
r = 1/int(entry)
break
except:
print("Oops!", sys.exc_info()[0], "occurred.")
print("Next entry.")
print()
print("The reciprocal of", entry, "is", r)
Sortie
The entry is a Oops! <class 'ValueError'> occurred. Next entry. The entry is 0 Oops! <class 'ZeroDivisionError'> occured. Next entry. The entry is 2 The reciprocal of 2 is 0.5
Dans ce programme, nous parcourons les valeurs de la randomList liste. Comme mentionné précédemment, la partie qui peut provoquer une exception est placée à l'intérieur du try
bloquer.
Si aucune exception ne se produit, le except
le bloc est ignoré et le flux normal continue (pour la dernière valeur). Mais si une exception se produit, elle est interceptée par le except
bloc (première et deuxième valeurs).
Ici, nous imprimons le nom de l'exception en utilisant le exc_info()
fonction à l'intérieur de sys
module. Nous pouvons voir que a
provoque ValueError
et 0
provoque ZeroDivisionError
.
Puisque chaque exception en Python hérite de la base Exception
classe, nous pouvons également effectuer la tâche ci-dessus de la manière suivante :
# import module sys to get the type of exception
import sys
randomList = ['a', 0, 2]
for entry in randomList:
try:
print("The entry is", entry)
r = 1/int(entry)
break
except Exception as e:
print("Oops!", e.__class__, "occurred.")
print("Next entry.")
print()
print("The reciprocal of", entry, "is", r)
Ce programme a la même sortie que le programme ci-dessus.
Intercepter des exceptions spécifiques en Python
Dans l'exemple ci-dessus, nous n'avons mentionné aucune exception spécifique dans le except
clause.
Ce n'est pas une bonne pratique de programmation car elle interceptera toutes les exceptions et traitera chaque cas de la même manière. Nous pouvons spécifier quelles exceptions un except
clause devrait attraper.
Un try
la clause peut avoir n'importe quel nombre de except
clauses pour gérer différentes exceptions, cependant, une seule sera exécutée en cas d'exception.
Nous pouvons utiliser un tuple de valeurs pour spécifier plusieurs exceptions dans une clause except. Voici un exemple de pseudo-code.
try:
# do something
pass
except ValueError:
# handle ValueError exception
pass
except (TypeError, ZeroDivisionError):
# handle multiple exceptions
# TypeError and ZeroDivisionError
pass
except:
# handle all other exceptions
pass
Lever des exceptions en Python
Dans la programmation Python, des exceptions sont déclenchées lorsque des erreurs se produisent lors de l'exécution. Nous pouvons également lever manuellement des exceptions en utilisant le raise
mot-clé.
Nous pouvons éventuellement transmettre des valeurs à l'exception pour clarifier pourquoi cette exception a été déclenchée.
>>> raise KeyboardInterrupt
Traceback (most recent call last):
...
KeyboardInterrupt
>>> raise MemoryError("This is an argument")
Traceback (most recent call last):
...
MemoryError: This is an argument
>>> try:
... a = int(input("Enter a positive integer: "))
... if a <= 0:
... raise ValueError("That is not a positive number!")
... except ValueError as ve:
... print(ve)
...
Enter a positive integer: -2
That is not a positive number!
Python essaie avec la clause else
Dans certaines situations, vous voudrez peut-être exécuter un certain bloc de code si le bloc de code à l'intérieur de try
exécuté sans aucune erreur. Pour ces cas, vous pouvez utiliser le else
facultatif mot-clé avec le try
déclaration.
Remarque :Les exceptions dans la clause else ne sont pas gérées par les clauses except précédentes.
Prenons un exemple :
# program to print the reciprocal of even numbers
try:
num = int(input("Enter a number: "))
assert num % 2 == 0
except:
print("Not an even number!")
else:
reciprocal = 1/num
print(reciprocal)
Sortie
Si on passe un nombre impair :
Enter a number: 1 Not an even number!
Si nous passons un nombre pair, l'inverse est calculé et affiché.
Enter a number: 4 0.25
Cependant, si nous passons 0, nous obtenons ZeroDivisionError
comme bloc de code à l'intérieur de else
n'est pas géré en précédant except
.
Enter a number: 0 Traceback (most recent call last): File "<string>", line 7, in <module> reciprocal = 1/num ZeroDivisionError: division by zero
Essayer Python... enfin
Le try
instruction en Python peut avoir un finally
facultatif clause. Cette clause est exécutée quoi qu'il arrive et est généralement utilisée pour libérer des ressources externes.
Par exemple, nous pouvons être connectés à un centre de données distant via le réseau ou travailler avec un fichier ou une interface utilisateur graphique (GUI).
Dans toutes ces circonstances, nous devons nettoyer la ressource avant que le programme ne s'arrête, qu'il ait réussi ou non. Ces actions (fermeture d'un fichier, interface graphique ou déconnexion du réseau) sont effectuées dans le finally
clause de garantie d'exécution.
Voici un exemple d'opérations sur les fichiers pour illustrer cela.
try:
f = open("test.txt",encoding = 'utf-8')
# perform file operations
finally:
f.close()
Ce type de construction garantit que le fichier est fermé même si une exception se produit lors de l'exécution du programme.
Python
- Mots clés et identifiants Python
- Instruction Python, indentation et commentaires
- Variables, constantes et littéraux Python
- Conversion de type Python et conversion de type
- Entrée, sortie et importation Python
- Instruction de passe Python
- Variables Python globales, locales et non locales
- Répertoire Python et gestion des fichiers
- Gestion des exceptions Python à l'aide de l'instruction try, except et finally