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 ne va pas).
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 function B
, qui à son tour appelle function C
. Si une exception se produit dans la fonction C
mais n'est pas gérée 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.
Attraper les exceptions en Python
En Python, les exceptions peuvent être gérées à l'aide d'une try
instruction.
L'opération critique qui peut déclencher une exception est placée à l'intérieur de la try
clause. Le code qui gère les exceptions est écrit dans la except
clause.
On peut ainsi choisir les opérations à effectuer une fois que l'on a attrapé 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)
Production
L'entrée est un Oups! eu lieu. Entrée suivante. L'entrée est 0 Oups! s'est produite. Entrée suivante. L'entrée est 2 La réciproque de 2 est 0,5
Dans ce programme, nous parcourons les valeurs de la liste randomList. Comme mentionné précédemment, la partie qui peut provoquer une exception est placée à l'intérieur du try
bloc.
Si aucune exception ne se produit, le except
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 la exc_info()
fonction à l'intérieur du sys
module. Nous pouvons voir que les a
causes ValueError
et les 0
causes ZeroDivisionError
.
Étant donné que chaque exception en Python hérite de la Exception
classe de base , 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.
Attraper des exceptions spécifiques en Python
Dans l'exemple ci-dessus, nous n'avons mentionné aucune exception spécifique dans la except
clause.
Ce n'est pas une bonne pratique de programmation car il détecte toutes les exceptions et gère chaque cas de la même manière. Nous pouvons spécifier les exceptions qu'une except
clause doit intercepter.
Une try
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 au moment de l'exécution. Nous pouvons également lever manuellement des exceptions à l'aide du 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 essayer avec la clause else
Dans certaines situations, vous souhaiterez peut-être exécuter un certain bloc de code si le bloc de code à l'intérieur try
s'est exécuté sans aucune erreur. Dans ces cas, vous pouvez utiliser le else
mot-clé facultatif avec l' try
instruction.
Remarque : les exceptions de la clause else ne sont pas gérées par les clauses except précédentes.
Regardons 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)
Production
Si nous passons un nombre impair:
Entrez un nombre: 1 Pas un nombre pair!
Si nous passons un nombre pair, l'inverse est calculé et affiché.
Entrez un nombre: 4 0,25
Cependant, si nous passons 0, nous obtenons ZeroDivisionError
car le bloc de code à l'intérieur else
n'est pas géré par le précédent except
.
Entrez un nombre: 0 Traceback (dernier appel le plus récent): Fichier "", ligne 7, en réciproque = 1 / num ZeroDivisionError: division par zéro
Python essaie… enfin
L' try
instruction en Python peut avoir une finally
clause facultative . 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 soit exécuté avec succès ou non. Ces actions (fermeture d'un fichier, interface graphique ou déconnexion du réseau) sont effectuées dans la finally
clause pour garantir l'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 pendant l'exécution du programme.