Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

Gestion des exceptions Python à l'aide de l'instruction try, except et finally

Gestion des exceptions Python à l'aide des instructions 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 tourne mal).

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 la fonction B , qui à son tour appelle la fonction C . Si une exception se produit dans la fonction C mais n'est pas géré 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 et de manière inattendue.

Récupérer les exceptions en Python

En Python, les exceptions peuvent être gérées à l'aide d'un try déclaration.

L'opération critique qui peut lever une exception est placée à l'intérieur du try clause. Le code qui gère les exceptions est écrit dans le except clause.

Nous pouvons ainsi choisir les opérations à effectuer une fois que nous avons intercepté 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)

Sortie

The entry is a
Oops! <class 'ValueError'> occurred.
Next entry.

The entry is 0
Oops! <class 'ZeroDivisionError'> occured.
Next entry.

The entry is 2
The reciprocal of 2 is 0.5

Dans ce programme, nous parcourons les valeurs de la randomList liste. Comme mentionné précédemment, la partie qui peut provoquer une exception est placée à l'intérieur du try bloquer.

Si aucune exception ne se produit, le except le 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 le exc_info() fonction à l'intérieur de sys module. Nous pouvons voir que a provoque ValueError et 0 provoque ZeroDivisionError .

Puisque chaque exception en Python hérite de la base Exception classe, 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.

Intercepter des exceptions spécifiques en Python

Dans l'exemple ci-dessus, nous n'avons mentionné aucune exception spécifique dans le except clause.

Ce n'est pas une bonne pratique de programmation car elle interceptera toutes les exceptions et traitera chaque cas de la même manière. Nous pouvons spécifier quelles exceptions un except clause devrait attraper.

Un try la 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 lors de l'exécution. Nous pouvons également lever manuellement des exceptions en utilisant le 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 essaie avec la clause else

Dans certaines situations, vous voudrez peut-être exécuter un certain bloc de code si le bloc de code à l'intérieur de try exécuté sans aucune erreur. Pour ces cas, vous pouvez utiliser le else facultatif mot-clé avec le try déclaration.

Remarque :Les exceptions dans la clause else ne sont pas gérées par les clauses except précédentes.

Prenons 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)

Sortie

Si on passe un nombre impair :

Enter a number: 1
Not an even number!

Si nous passons un nombre pair, l'inverse est calculé et affiché.

Enter a number: 4
0.25

Cependant, si nous passons 0, nous obtenons ZeroDivisionError comme bloc de code à l'intérieur de else n'est pas géré en précédant except .

Enter a number: 0
Traceback (most recent call last):
  File "<string>", line 7, in <module>
    reciprocal = 1/num
ZeroDivisionError: division by zero

Essayer Python... enfin

Le try instruction en Python peut avoir un finally facultatif clause. 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 ait réussi ou non. Ces actions (fermeture d'un fichier, interface graphique ou déconnexion du réseau) sont effectuées dans le finally clause de garantie d'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 lors de l'exécution du programme.


Python

  1. Mots clés et identifiants Python
  2. Instruction Python, indentation et commentaires
  3. Variables, constantes et littéraux Python
  4. Conversion de type Python et conversion de type
  5. Entrée, sortie et importation Python
  6. Instruction de passe Python
  7. Variables Python globales, locales et non locales
  8. Répertoire Python et gestion des fichiers
  9. Gestion des exceptions Python à l'aide de l'instruction try, except et finally