logo

Gestion des exceptions Python

Nous avons exploré Python de base jusqu'à présent, des ensembles 1 à 4 ( Ensemble 1 | Ensemble 2 | Ensemble 3 | Ensemble 4 ).

Dans cet article, nous verrons comment gérer les exceptions en Python à l'aide des instructions try, except et enfin à l'aide d'exemples appropriés.

L'erreur en Python peut être de deux types, à savoir Erreurs de syntaxe et exceptions . Les erreurs sont des problèmes dans un programme à cause desquels le programme arrêtera son exécution. D'un autre côté, des exceptions sont déclenchées lorsque certains événements internes se produisent et modifient le déroulement normal du programme.



Différents types d'exceptions en python :

En Python, il existe plusieurs exceptions Python intégrées qui peuvent être déclenchées lorsqu'une erreur se produit lors de l'exécution d'un programme. Voici quelques-uns des types d’exceptions les plus courants en Python :

gimp remplacer la couleur
  • Erreur de syntaxe: Cette exception est levée lorsque l'interpréteur rencontre une erreur de syntaxe dans le code, telle qu'un mot clé mal orthographié, un deux-points manquant ou une parenthèse déséquilibrée.
  • Erreur-type : Cette exception est déclenchée lorsqu'une opération ou une fonction est appliquée à un objet du mauvais type, comme l'ajout d'une chaîne à un entier.
  • NomErreur : Cette exception est levée lorsqu'un nom de variable ou de fonction est introuvable dans la portée actuelle.
  • Erreur d'index : Cette exception est déclenchée lorsqu'un index est hors plage pour une liste, un tuple ou d'autres types de séquence.
  • Erreur de clé : Cette exception est levée lorsqu'une clé n'est pas trouvée dans un dictionnaire.
  • ValeurErreur : Cette exception est levée lorsqu'une fonction ou une méthode est appelée avec un argument ou une entrée non valide, par exemple en essayant de convertir une chaîne en entier lorsque la chaîne ne représente pas un entier valide.
  • Erreur d'attribut : Cette exception est levée lorsqu'un attribut ou une méthode n'est pas trouvé sur un objet, par exemple en essayant d'accéder à un attribut inexistant d'une instance de classe.
  • Erreur IOErreur : Cette exception est déclenchée lorsqu'une opération d'E/S, telle que la lecture ou l'écriture d'un fichier, échoue en raison d'une erreur d'entrée/sortie.
  • ErreurDivisionZéro : Cette exception est déclenchée lorsqu'une tentative est faite pour diviser un nombre par zéro.
  • Erreur d'importation : Cette exception est levée lorsqu'une instruction d'importation ne parvient pas à trouver ou à charger un module.

Ce ne sont là que quelques exemples des nombreux types d’exceptions pouvant survenir en Python. Il est important de gérer correctement les exceptions dans votre code à l'aide de blocs try-sauf ou d'autres techniques de gestion des erreurs, afin de gérer les erreurs avec élégance et d'éviter que le programme ne plante.

Différence entre l'erreur de syntaxe et les exceptions

Erreur de syntaxe: Comme son nom l'indique, cette erreur est causée par une syntaxe incorrecte dans le code. Cela conduit à la fin du programme.

Exemple:

Il y a une erreur de syntaxe dans le code. Le ' if'> l'instruction doit être suivie de deux points (:>), et le ' print'> la déclaration doit être mise en retrait pour être à l'intérieur du ' if'> bloc.

Python3




amount>=> 10000> if>(amount>>2999>)> print>(>'You are eligible to purchase Dsa Self Paced'>)>

>

>

Sortir:

Des exceptions: Des exceptions sont levées lorsque le programme est syntaxiquement correct, mais que le code génère une erreur. Cette erreur n'arrête pas l'exécution du programme, mais elle modifie le déroulement normal du programme.

Exemple:

Ici, dans ce code, comme nous divisons le 'Des marques' par zéro donc une erreur se produira connue sous le nom de « Erreur de division zéro »

Python3




marks>=> 10000> a>=> marks>/> 0> print>(a)>

>

>

Sortir:

Dans l'exemple ci-dessus, ZeroDivisionError a été généré lorsque nous essayons de diviser un nombre par 0.

Note: Exception est la classe de base pour toutes les exceptions en Python. Vous pouvez vérifier la hiérarchie des exceptions ici .

Exemple:

1) TypeError : cette exception est levée lorsqu'une opération ou une fonction est appliquée à un objet du mauvais type. Voici un exemple :
Voici un 'Erreur-type' est déclenché car les deux types de données sont différents et sont ajoutés.

Python3




x>=> 5> y>=> 'hello'> z>=> x>+> y>

>

>

output:  Traceback (most recent call last):  File '7edfa469-9a3c-4e4d-98f3-5544e60bff4e.py', line 4, in   z = x + y TypeError: unsupported operand type(s) for +: 'int' and 'str'>

essayez catch block pour le résoudre :

Le code tente d'ajouter un entier ( ' x'> ) et une chaîne ( ' y'> ) ensemble, ce qui n'est pas une opération valide, et cela soulèvera un ' TypeError'> . Le code utilisait un ' try'> et ' except'> block pour intercepter cette exception et imprimer un message d’erreur.

Python3




x>=> 5> y>=> 'hello'> try>:> >z>=> x>+> y> except> TypeError:> >print>(>'Error: cannot add an int and a str'>)>

>

>

Sortir

Error: cannot add an int and a str>

Instruction Try and Except – Détecter les exceptions

Les instructions Try et Except sont utilisées pour intercepter et gérer les exceptions en Python. Les instructions qui peuvent déclencher des exceptions sont conservées dans la clause try et les instructions qui gèrent l'exception sont écrites dans la clause except.

Exemple: Ici, nous essayons d'accéder à l'élément du tableau dont l'index est hors limite et de gérer l'exception correspondante.

Python3




a>=> [>1>,>2>,>3>]> try>:> >print> (>'Second element = %d'> %>(a[>1>]))> >print> (>'Fourth element = %d'> %>(a[>3>]))> except>:> >print> (>'An error occurred'>)>

>

>

Sortir

Second element = 2 An error occurred>

Dans l'exemple ci-dessus, les instructions pouvant provoquer l'erreur sont placées dans l'instruction try (deuxième instruction print dans notre cas). La deuxième instruction print tente d'accéder au quatrième élément de la liste qui n'est pas là et cela lève une exception. Cette exception est ensuite interceptée par l'instruction except.

Détecter une exception spécifique

Une instruction try peut avoir plusieurs clauses except, pour spécifier des gestionnaires pour différentes exceptions. Veuillez noter qu'au plus un gestionnaire sera exécuté. Par exemple, nous pouvons ajouter IndexError dans le code ci-dessus. La syntaxe générale pour ajouter des exceptions spécifiques est la suivante :

try:  # statement(s) except IndexError:  # statement(s) except ValueError:  # statement(s)>

Exemple: Détecter des exceptions spécifiques dans Python

Le code définit une fonction ' fun(a)'> qui calculeb>basé sur l'entréea>. Sia>est inférieur à 4, il tente une division par zéro, provoquant un ' ZeroDivisionError'> . Le code appellefun(3)>etfun(5)>à l'intérieur d'un bloc try-sauf. Il gère leZeroDivisionError>pourfun(3)>et des impressions ZeroDivisionError s’est produite et gérée. Le ' NameError'> Le bloc n'est pas exécuté car il n'y a pas de ' NameError'> exceptions dans le code.

Python3




def> fun(a):> >if> a <>4>:> >b>=> a>/>(a>->3>)> >print>(>'Value of b = '>, b)> > try>:> >fun(>3>)> >fun(>5>)> except> ZeroDivisionError:> >print>(>'ZeroDivisionError Occurred and Handled'>)> except> NameError:> >print>(>'NameError Occurred and Handled'>)>

>

>

Sortir

ZeroDivisionError Occurred and Handled>

Si vous commentez la ligne fun(3), le résultat sera

NameError Occurred and Handled>

Le résultat ci-dessus est le cas car dès que python tente d'accéder à la valeur de b, NameError se produit.

Essayez avec la clause Else

En Python, vous pouvez également utiliser la clause else sur le bloc try-sauf qui doit être présente après toutes les clauses except. Le code entre dans le bloc else uniquement si la clause try ne déclenche pas d'exception.

Essayez avec la clause else

Le code définit une fonction AbyB(a, b)> qui calculec>comme ((a+b) / (a-b)) et gère un potentielZeroDivisionError>. Il imprime le résultat s’il n’y a pas d’erreur de division par zéro. Appel AbyB(2.0, 3.0)> calcule et imprime-5.0>, en appelant AbyB(3.0, 3.0)> tente de diviser par zéro, ce qui donne un ZeroDivisionError> , qui est capturé et a/b donne 0 est imprimé.

Python3

contient dans la chaîne




def> AbyB(a , b):> >try>:> >c>=> ((a>+>b)>/> (a>->b))> >except> ZeroDivisionError:> >print> (>'a/b result in 0'>)> >else>:> >print> (c)> AbyB(>2.0>,>3.0>)> AbyB(>3.0>,>3.0>)>

>

>

Sortir:

-5.0 a/b result in 0>

Enfin le mot-clé en Python

Python fournit un mot-clé enfin , qui est toujours exécuté après les blocs try et except. Le bloc final s'exécute toujours après la fin normale du bloc try ou après la fin du bloc try en raison d'une exception.

Syntaxe:

try:  # Some Code....   except:  # optional block  # Handling of exception (if required)  else:  # execute if no exception  finally:  # Some code .....(always executed)>

Exemple:

Le code tente d'effectuer une division entière par zéro, ce qui entraîne un ZeroDivisionError> . Il attrape l'exception et imprime Je ne peux pas diviser par zéro. Quelle que soit l'exception, lefinally>le bloc est exécuté et s'imprime Ceci est toujours exécuté.

Python3




try>:> >k>=> 5>/>/>0> >print>(k)> except> ZeroDivisionError:> >print>(>'Can't divide by zero'>)> finally>:> >print>(>'This is always executed'>)>

>

>

Sortir:

Can't divide by zero This is always executed>

Lever une exception

Le augmenter la déclaration permet au programmeur de forcer une exception spécifique à se produire. Le seul argument de raise indique l’exception à déclencher. Il doit s'agir soit d'une instance d'exception, soit d'une classe d'exception (une classe qui dérive d'Exception).

Ce code soulève intentionnellement unNameError>avec le message Salut en utilisant leraise>déclaration dans untry>bloc. Ensuite, il attrape leNameError>exception, impressions Une exception, et relance la même exception en utilisantraise>. Cela montre comment des exceptions peuvent être générées et gérées en Python, permettant des messages d'erreur personnalisés et une propagation ultérieure des exceptions.

Python3




try>:> >raise> NameError(>'Hi there'>)> except> NameError:> >print> (>'An exception'>)> >raise>

>

>

La sortie du code ci-dessus sera simplement imprimée comme une exception, mais une erreur d'exécution se produira également dans la dernière en raison de l'instruction raise dans la dernière ligne. Ainsi, la sortie sur votre ligne de commande ressemblera à

Traceback (most recent call last):  File '/home/d6ec14ca595b97bff8d8034bbf212a9f.py', line 5, in   raise NameError('Hi there') # Raise Error NameError: Hi there>

Avantages de la gestion des exceptions :

  • Fiabilité améliorée du programme : En gérant correctement les exceptions, vous pouvez empêcher votre programme de planter ou de produire des résultats incorrects en raison d'erreurs ou de saisies inattendues.
  • Gestion simplifiée des erreurs : La gestion des exceptions vous permet de séparer le code de gestion des erreurs de la logique principale du programme, ce qui facilite la lecture et la maintenance de votre code.
  • Code plus propre : Grâce à la gestion des exceptions, vous pouvez éviter d'utiliser des instructions conditionnelles complexes pour rechercher des erreurs, ce qui conduit à un code plus propre et plus lisible.
  • Débogage plus facile : Lorsqu'une exception est déclenchée, l'interpréteur Python imprime un traçage qui indique l'emplacement exact où l'exception s'est produite, ce qui facilite le débogage de votre code.

Inconvénients de la gestion des exceptions :

  • Surcharge de performances : La gestion des exceptions peut être plus lente que l'utilisation d'instructions conditionnelles pour vérifier les erreurs, car l'interpréteur doit effectuer un travail supplémentaire pour intercepter et gérer l'exception.
  • Complexité accrue du code : La gestion des exceptions peut rendre votre code plus complexe, surtout si vous devez gérer plusieurs types d'exceptions ou implémenter une logique de gestion des erreurs complexe.
  • Risques de sécurité possibles : Des exceptions mal gérées peuvent potentiellement révéler des informations sensibles ou créer des failles de sécurité dans votre code. Il est donc important de gérer les exceptions avec soin et d'éviter d'exposer trop d'informations sur votre programme.

Dans l’ensemble, les avantages de la gestion des exceptions en Python l’emportent sur les inconvénients, mais il est important de l’utiliser judicieusement et avec précaution afin de maintenir la qualité du code et la fiabilité du programme.

Cet article est rédigé par Nikhil Kumar Singh (nickzuck_007)