Gestion des exceptions Python à l'aide de l'instruction 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 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 Aqui appelle function B, qui à son tour appelle function C. Si une exception se produit dans la fonction Cmais 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 tryinstruction.

L'opération critique qui peut déclencher une exception est placée à l'intérieur de la tryclause. Le code qui gère les exceptions est écrit dans la exceptclause.

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 trybloc.

Si aucune exception ne se produit, le exceptbloc est ignoré et le flux normal continue (pour la dernière valeur). Mais si une exception se produit, elle est interceptée par le exceptbloc (première et deuxième valeurs).

Ici, nous imprimons le nom de l'exception en utilisant la exc_info()fonction à l'intérieur du sysmodule. Nous pouvons voir que les acauses ValueErroret les 0causes ZeroDivisionError.

Étant donné que chaque exception en Python hérite de la Exceptionclasse 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 exceptclause.

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 exceptclause doit intercepter.

Une tryclause peut avoir n'importe quel nombre de exceptclauses 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 raisemot - 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 trys'est exécuté sans aucune erreur. Dans ces cas, vous pouvez utiliser le elsemot-clé facultatif avec l' tryinstruction.

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 ZeroDivisionErrorcar le bloc de code à l'intérieur elsen'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' tryinstruction en Python peut avoir une finallyclause 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 finallyclause 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.

Articles intéressants...