Comment gérer les exceptions en Python

Il est très courant de rencontrer des erreurs lors de l’exécution d’un programme. Les erreurs de syntaxe et les exceptions sont les deux types d’erreurs les plus courantes. Des erreurs de syntaxe se produisent lorsque vous tapez le code de manière incorrecte. Dans de tels cas, l'analyseur répète la ligne erronée avec une flèche pointant vers l'emplacement le plus ancien où l'erreur a été détectée..

Les exceptions sont différentes des erreurs de syntaxe. Ils se produisent pendant l'exécution d'un programme lorsque quelque chose d'inattendu se produit. Par exemple, supposons que vous demandez à l’utilisateur de saisir un nombre afin d’effectuer une division. Maintenant, si l’utilisateur entre une chaîne au lieu d’un nombre et que vous essayez de diviser un nombre par l’entrée donnée, le programme affichera un Erreur-type

Si vous ne gérez pas correctement les exceptions, le programme se ferme brutalement car il ne sait pas quoi faire dans de tels cas. Le code suivant est un exemple:

keep_asking = True alors que keep_asking: x = int (entrée ("Entrez un nombre:")) print ("En divisant 50 par", x, "vous donnera:", 50 / x)

Tant que vous entrez une valeur d'entrée intégrale, le programme fonctionnera correctement. Cependant, dès que vous entrez une chaîne ou même un nombre décimal en entrée, vous obtenez un ValueError exception.

Dans ce tutoriel, vous apprendrez à gérer et à générer des exceptions correctement en Python..

Quelques exceptions communes

Voici quelques exceptions de base que vous pourriez rencontrer lors de l’écriture de programmes. Vous pouvez lire sur beaucoup d'autres exceptions intégrées sur le site officiel.

  • NameErrorRemarque: Cette exception est déclenchée lorsque le programme ne peut pas trouver un nom local ou global. Le nom introuvable est inclus dans le message d'erreur.
  • Erreur-typeRemarque: Cette exception est déclenchée lorsqu'une fonction reçoit comme argument un objet du type inapproprié. Plus de détails sur le type incorrect sont fournis dans le message d'erreur.
  • ValueError: Cette exception se produit lorsqu'un argument de fonction a le bon type mais une valeur inappropriée. 
  • NotImplementedError: Cette exception est déclenchée lorsqu'un objet est supposé prendre en charge une opération mais qu'il n'a pas encore été implémenté. Vous ne devez pas utiliser cette erreur lorsque la fonction donnée n'est pas conçue pour prendre en charge le type d'argument d'entrée. Dans ces situations, élever un Erreur-type l'exception est plus appropriée.
  • ZeroDivisionError: Cette exception est déclenchée lorsque vous fournissez le deuxième argument d'une opération de division ou modulo à zéro.
  • FileNotFoundError: Cette exception est déclenchée lorsque le fichier ou le répertoire demandé par le programme n'existe pas.

Tout comme les noms ci-dessus, la plupart des exceptions ont des noms qui se passent d'explication..

Gérer une exception

Le code au début de l'article demandait aux utilisateurs de saisir un entier en tant qu'entrée. Si l'utilisateur n'a pas fourni d'entrée entière, le programme a arrêté l'exécution et a généré une exception d'erreur de valeur. Dans cette section, nous écrirons du code pour indiquer à l'utilisateur que sa saisie n'est pas une valeur entière valide.

La première étape du processus consiste à inclure le code qui, selon vous, peut générer une exception à l'intérieur du essayer clause. La prochaine étape consiste à utiliser le sauf mot-clé pour gérer l'exception qui s'est produite dans le code ci-dessus. Le code modifié pour l'entrée utilisateur ressemblera à ceci:

keep_asking = True pendant que keep_asking: try: x = int (entrée ("Entrez un nombre:")). print ("La division de 50 par", x, "vous donnera:", 50 / x) sauf ValueError: print (" L’entrée n’était pas un entier. Veuillez réessayer… ")

Qu'est-ce qui se passe ici est que le programme essaie d'exécuter le code à l'intérieur de la essayer clause. Si aucune exception n'a été déclenchée, le programme ignore la sauf La clause et le reste du code s’exécute normalement. Si une exception est déclenchée, le programme ignore le code restant à l'intérieur de la essayer la clause et le type de l'exception est mis en correspondance avec le nom de l'exception après le sauf mot-clé. En cas de correspondance, le code à l'intérieur du sauf La clause est exécutée en premier, puis le reste du code après la essayer la clause est exécutée normalement.

Lorsque vous entrez un entier en tant qu'entrée, le programme vous donne le résultat final de la division. Lorsqu'une valeur non intégrale est fournie, le programme imprime un message vous invitant à essayer de saisir à nouveau un entier. Notez que cette fois, le programme ne se ferme pas brusquement lorsque vous fournissez des entrées non valides..

Vous pouvez avoir plusieurs sauf clauses permettant de gérer différentes exceptions. Veuillez garder à l’esprit que ces gestionnaires ne traiteront que les exceptions survenues dans la liste correspondante. essayer clause. Ils ne gèreront aucune exception générée par d'autres gestionnaires d'exceptions..

Vous pouvez également gérer plusieurs exceptions en utilisant un seul sauf clause en passant ces exceptions à la clause en tant que tuple.

sauf (ZeroDivisionError, ValueError, TypeError): print ("Quelque chose ne va pas ...") # code pour traiter l'exception

Enfin, vous pouvez également omettre le nom de l’exception après le sauf mot-clé. Ceci n'est généralement pas recommandé car le code va maintenant récupérer toutes les exceptions et les traiter de la même manière. Ce n'est pas optimal car vous allez gérer un Erreur-type exception de la même manière que vous auriez traité un ZeroDivisionError exception. Lors du traitement des exceptions, il est préférable d’être aussi précis que possible et de ne capturer que ce que vous pouvez gérer..

Une des utilisations possibles de la capture de toutes les exceptions est d’afficher correctement à l’écran l’erreur d’exception telle que le code suivant:

import math import sys try: result = math.factorial (2.4) sauf: print ("Quelque chose d'inattendu s'est passé.", sys.exc_info () [0]) else: print ("The factorial is", résultat)

Utilisation de la clause Else

Vous pouvez également utiliser un autre clause dans un essayez… sauf déclaration. le autre La clause doit contenir du code qui doit être exécuté si le essayer la clause ne soulevait aucune exception. Cela peut être utile pour s’assurer que vous n’ajoutez aucun code à la essayer bloquer les exceptions dont vous ne voulez pas capturer les exceptions. Une chose à noter est que si vous décidez d'utiliser un autre clause, vous devriez l’inclure après tous les sauf clauses mais avant la enfin bloc.

Dans notre cas, nous pourrions déplacer la ligne qui affiche le résultat de notre division à l'intérieur du autre bloc.

keep_asking = True pendant que keep_asking: try: x = int (entrée ("Veuillez entrer un nombre:")) sauf ValueError: print ("L'entrée n'était pas un entier valide. Veuillez essayer à nouveau ..."): print ("50 par ", x", vous donnera: ", 50 / x)

Nettoyage à l'aide de la clause Finally

Disons que vous avez écrit du code à l'intérieur du essayer bloquer qui est supposé effectuer une tâche en utilisant une grande quantité de ressources. Il est important de libérer ces ressources lorsque vous avez fini de les utiliser. Ceci peut être facilement réalisé en utilisant le enfin clause. 

Le code à l'intérieur du enfin Cette clause est toujours exécutée, que la essayer block a levé une exception. Vous pouvez le vérifier en exécutant le code suivant:

keep_asking = True pendant que keep_asking: try: x = int (entrée ("Veuillez entrer un nombre:")) sauf ValueError: print ("L'entrée n'était pas un entier valide. Veuillez essayer à nouveau ..."): print ("50 par ", x", vous donnera: ", 50 / x) enfin: print (" Déjà fait tout ce qui était nécessaire. ")

Si l'un des sauf les clauses que vous avez spécifiées ne gèrent pas l’exception levée, la même exception est levée après l’exécution du code à l’intérieur du enfin bloc.

Un exemple plus complexe

Dans cette section, nous allons écrire un programme pour gérer plusieurs exceptions. Comme pour les exemples précédents, nous allons effectuer des opérations mathématiques. Cependant, cette fois, nous prendrons l’entrée d’une liste.

Le code suivant vérifie deux exceptions, Erreur-type et ValueError. le autre bloc est utilisé pour imprimer la factorielle. Vous pouvez voir dans la sortie que ce code est exécuté uniquement lorsqu'aucune exception n'est déclenchée..

import math number_list = [10, -5,1.2, 'apple'] pour number dans number_list: try: number_factorial = math.factorial (nombre) sauf TypeError: print ("Factorial n'est pas pris en charge pour un type d'entrée donné.") sauf ValueError : print ("Factorial n'accepte que les valeurs entières positives.", nombre, "n'est pas un entier positif.") else: print ("La factorielle de", nombre, "est", number_factorial) enfin: print ("Libère les ressources utilisé.")

Le code ci-dessus produit la sortie suivante:

La factorielle de 10 est 3628800 Libération des ressources utilisées. Factorielle accepte uniquement les valeurs entières positives. -5 n'est pas un entier positif. Libérer les ressources en cours d'utilisation. Factorielle accepte uniquement les valeurs entières positives. 1.2 n'est pas un entier positif. Libérer les ressources en cours d'utilisation. La factorielle n'est pas prise en charge pour un type d'entrée donné. Libérer les ressources en cours d'utilisation.

Une autre chose à noter est que le code à l’intérieur du enfin clause est exécutée pour chaque élément de la liste.

Dernières pensées

J'espère que ce tutoriel vous a aidé à comprendre la gestion des exceptions en Python. De plus, n'hésitez pas à voir ce que nous avons disponible à la vente et à étudier sur le marché, et n'hésitez pas à poser des questions et à fournir vos précieux commentaires en utilisant le flux ci-dessous.

Le traitement correct des exceptions peut être très utile dans les cas où la sortie d'un programme après la réception d'une entrée inattendue n'est pas viable. Si vous avez des questions concernant la gestion des exceptions dans Python, veuillez me le faire savoir dans les commentaires.. 

Apprendre le python

Apprenez Python avec notre guide complet de tutoriel sur Python, que vous soyez débutant ou que vous soyez un codeur chevronné cherchant à acquérir de nouvelles compétences..