Python - Gestion des exceptions
Page PrécédentePage Suivante
Python fournit deux fonctionnalités très importantes pour gérer toute erreur inattendue dans vos programmes Python et pour y ajouter des capacités de débogage −
-
Gestion des exceptions − Cela serait couvert dans ce tutoriel. Voici une liste des exceptions standard disponibles en Python :Exceptions standard.
-
Affirmations − Cela serait couvert dans le didacticiel Assertions en Python.
Liste des exceptions standard −
Sr.No. | Nom et description de l'exception |
---|---|
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 |
Assertions en Python
Une assertion est une vérification de cohérence que vous pouvez activer ou désactiver lorsque vous avez terminé de tester le programme.
La façon la plus simple de penser à une assertion est de la comparer à un raise-if instruction (ou pour être plus précis, une instruction raise-if-not). Une expression est testée et si le résultat est faux, une exception est levée.
Les assertions sont effectuées par l'instruction assert, le mot-clé le plus récent de Python, introduit dans la version 1.5.
Les programmeurs placent souvent des assertions au début d'une fonction pour vérifier la validité de l'entrée, et après un appel de fonction pour vérifier la validité de la sortie.
L'assertion Déclaration
Lorsqu'il rencontre une instruction assert, Python évalue l'expression qui l'accompagne, ce qui, espérons-le, est vrai. Si l'expression est fausse, Python lève une AssertionError exception.
La syntaxe pour assert est −
assert Expression[, Arguments]
Si l'assertion échoue, Python utilise ArgumentExpression comme argument pour AssertionError. Les exceptions AssertionError peuvent être interceptées et gérées comme n'importe quelle autre exception à l'aide de l'instruction try-except, mais si elles ne sont pas gérées, elles mettront fin au programme et produiront une trace.
Exemple
Voici une fonction qui convertit une température de degrés Kelvin en degrés Fahrenheit. Étant donné que zéro degré Kelvin est aussi froid que possible, la fonction s'arrête si elle voit une température négative −
Démo en direct#!/usr/bin/python def KelvinToFahrenheit(Temperature): assert (Temperature >= 0),"Colder than absolute zero!" return ((Temperature-273)*1.8)+32 print KelvinToFahrenheit(273) print int(KelvinToFahrenheit(505.78)) print KelvinToFahrenheit(-5)
Lorsque le code ci-dessus est exécuté, il produit le résultat suivant −
32.0 451 Traceback (most recent call last): File "test.py", line 9, in <module> print KelvinToFahrenheit(-5) File "test.py", line 4, in KelvinToFahrenheit assert (Temperature >= 0),"Colder than absolute zero!" AssertionError: Colder than absolute zero!
Qu'est-ce qu'une exception ?
Une exception est un événement qui se produit pendant l'exécution d'un programme et qui perturbe le flux normal des instructions du programme. En général, lorsqu'un script Python rencontre une situation qu'il ne peut pas gérer, il lève une exception. Une exception est un objet Python qui représente une erreur.
Lorsqu'un script Python déclenche une exception, il doit soit gérer l'exception immédiatement, soit il se termine et se ferme.
Gérer une exception
Si vous avez des informations suspectes code susceptible de déclencher une exception, vous pouvez défendre votre programme en plaçant le code suspect dans un try : bloquer. Après le try :block, incluez un except : instruction, suivie d'un bloc de code qui gère le problème aussi élégamment que possible.
Syntaxe
Voici une syntaxe simple de try....except...else blocs −
try: You do your operations here; ...................... except ExceptionI: If there is ExceptionI, then execute this block. except ExceptionII: If there is ExceptionII, then execute this block. ...................... else: If there is no exception then execute this block.
Voici quelques points importants sur la syntaxe mentionnée ci-dessus −
-
Une seule instruction try peut avoir plusieurs instructions except. Ceci est utile lorsque le bloc try contient des instructions susceptibles de lever différents types d'exceptions.
-
Vous pouvez également fournir une clause except générique, qui gère toute exception.
-
Après la ou les clauses except, vous pouvez inclure une clause else. Le code du bloc else s'exécute si le code du bloc try:ne déclenche pas d'exception.
-
Le bloc else est un bon endroit pour le code qui n'a pas besoin de la protection try:block.
Exemple
Cet exemple ouvre un fichier, écrit du contenu dans le fichier et sort gracieusement car il n'y a aucun problème −
Démo en direct#!/usr/bin/python try: fh = open("testfile", "w") fh.write("This is my test file for exception handling!!") except IOError: print "Error: can\'t find file or read data" else: print "Written content in the file successfully" fh.close()
Cela produit le résultat suivant −
Written content in the file successfully
Exemple
Cet exemple essaie d'ouvrir un fichier où vous n'avez pas l'autorisation d'écriture, donc il lève une exception −
Démo en direct#!/usr/bin/python try: fh = open("testfile", "r") fh.write("This is my test file for exception handling!!") except IOError: print "Error: can\'t find file or read data" else: print "Written content in the file successfully"
Cela produit le résultat suivant −
Error: can't find file or read data
Le sauf Clause sans exception
Vous pouvez également utiliser l'instruction except sans exception définie comme suit −
try: You do your operations here; ...................... except: If there is any exception, then execute this block. ...................... else: If there is no exception then execute this block.
Ce genre d'essai sauf L'instruction intercepte toutes les exceptions qui se produisent. L'utilisation de ce type d'instruction try-except n'est cependant pas considérée comme une bonne pratique de programmation, car elle intercepte toutes les exceptions mais ne permet pas au programmeur d'identifier la cause première du problème qui peut survenir.
Le sauf Clause avec plusieurs exceptions
Vous pouvez également utiliser le même sauf déclaration pour gérer plusieurs exceptions comme suit −
try: You do your operations here; ...................... except(Exception1[, Exception2[,...ExceptionN]]]): If there is any exception from the given exception list, then execute this block. ...................... else: If there is no exception then execute this block.
La clause try-finally
Vous pouvez utiliser un enfin : bloquer avec un essayer : bloquer. Le bloc finally est un endroit où placer tout code qui doit s'exécuter, que le bloc try ait déclenché une exception ou non. La syntaxe de l'instruction try-finally est la suivante -
try: You do your operations here; ...................... Due to any exception, this may be skipped. finally: This would always be executed. ......................
Vous ne pouvez pas utiliser else clause ainsi qu'une clause finally.
Exemple
Démo en direct#!/usr/bin/python try: fh = open("testfile", "w") fh.write("This is my test file for exception handling!!") finally: print "Error: can\'t find file or read data"
Si vous n'êtes pas autorisé à ouvrir le fichier en mode écriture, cela produira le résultat suivant −
Error: can't find file or read data
Le même exemple peut être écrit plus proprement comme suit −
Démo en direct#!/usr/bin/python try: fh = open("testfile", "w") try: fh.write("This is my test file for exception handling!!") finally: print "Going to close the file" fh.close() except IOError: print "Error: can\'t find file or read data"
Lorsqu'une exception est levée dans le try bloc, l'exécution passe immédiatement au finalement bloquer. Après toutes les déclarations dans le enfin sont exécutés, l'exception est à nouveau levée et est gérée dans le except instructions si elles sont présentes dans la couche supérieure suivante de try-except déclaration.
Argument d'une exception
Une exception peut avoir un argument , qui est une valeur qui donne des informations supplémentaires sur le problème. Le contenu de l'argument varie par exception. Vous capturez l'argument d'une exception en fournissant une variable dans la clause except comme suit −
try: You do your operations here; ...................... except ExceptionType, Argument: You can print value of Argument here...
Si vous écrivez le code pour gérer une seule exception, vous pouvez faire en sorte qu'une variable suive le nom de l'exception dans l'instruction except. Si vous interceptez plusieurs exceptions, vous pouvez faire en sorte qu'une variable suive le tuple de l'exception.
Cette variable reçoit la valeur de l'exception contenant principalement la cause de l'exception. La variable peut recevoir une valeur unique ou plusieurs valeurs sous la forme d'un tuple. Ce tuple contient généralement la chaîne d'erreur, le numéro d'erreur et un emplacement d'erreur.
Exemple
Voici un exemple pour une seule exception −
Démo en direct#!/usr/bin/python # Define a function here. def temp_convert(var): try: return int(var) except ValueError, Argument: print "The argument does not contain numbers\n", Argument # Call above function here. temp_convert("xyz");
Cela produit le résultat suivant −
The argument does not contain numbers invalid literal for int() with base 10: 'xyz'
Soulever une exception
Vous pouvez déclencher des exceptions de plusieurs manières en utilisant l'instruction raise. La syntaxe générale de la raise déclaration est la suivante.
Syntaxe
raise [Exception [, args [, traceback]]]
Ici, Exception est le type d'exception (par exemple, NameError) et argument est une valeur pour l'argument exception. L'argument est facultatif; s'il n'est pas fourni, l'argument de l'exception est Aucun.
L'argument final, traceback, est également facultatif (et rarement utilisé dans la pratique), et s'il est présent, il s'agit de l'objet traceback utilisé pour l'exception.
Exemple
Une exception peut être une chaîne, une classe ou un objet. La plupart des exceptions soulevées par le noyau Python sont des classes, avec un argument qui est une instance de la classe. Définir de nouvelles exceptions est assez simple et peut être fait comme suit −
def functionName( level ): if level < 1: raise "Invalid level!", level # The code below to this would not be executed # if we raise the exception
Remarque : Afin d'intercepter une exception, une clause "except" doit faire référence à la même exception lancée, soit un objet de classe, soit une chaîne simple. Par exemple, pour capturer l'exception ci-dessus, nous devons écrire la clause except comme suit −
try: Business Logic here... except "Invalid level!": Exception handling here... else: Rest of the code here...
Exceptions définies par l'utilisateur
Python vous permet également de créer vos propres exceptions en dérivant des classes à partir des exceptions intégrées standard.
Voici un exemple lié à RuntimeError . Ici, une classe est créée qui est sous-classée de RuntimeError . Ceci est utile lorsque vous devez afficher des informations plus spécifiques lorsqu'une exception est interceptée.
Dans le bloc try, l'exception définie par l'utilisateur est déclenchée et interceptée dans le bloc except. La variable e est utilisée pour créer une instance de la classe Networkerror .
class Networkerror(RuntimeError): def __init__(self, arg): self.args = arg
Ainsi, une fois que vous avez défini la classe ci-dessus, vous pouvez déclencher l'exception comme suit −
try: raise Networkerror("Bad hostname") except Networkerror,e: print e.args
Python