===== Python : gérer les exceptions =====
===== Présentation =====
Lors de **l'exécution** d'un programme Python, certaines instructions ou expressions qui sont **syntaxiquement correcte**, peuvent **générer une erreur**: ce sont des **exceptions**. En effet, ces erreurs ne sont pas toujours fatales et le programmeur peut anticiper leur éventuelle survenue en prévoyant comment les traiter.
Si vous **ne prévoyez pas** de gérer les exceptions, cela entraînera l'**arrêt immédiat** du programme. La gestion des exceptions permet d'avoir un programme mieux fini.
===== Générer une exception =====
Voici un exemple de gestion d'une exception.
* Saisie d'un nombre par l'utilisateur :
# saisie d'une chaîne de caractère
nombre = input("Saisissez un nombre :")
# conversion de la chaîne de caractères en nombre
nombre = int(nombre)
* Ces deux instructions s'exécutent sans **aucun problème** si l'utilisateur saisit un **nombre**.
* Si l'utilisateur saisit aute chose qu'un nombre, des **lettres** par exemple, la deuxième instruction, celle qui permet de convertir la saisie en un nombre, **génère une exception**.
Saisissez un nombre : aaaaa
Traceback (most recent call last):
File "D:\Developpement\python\scripts\exception.py", line 2, in
nombre = int(nombre)
ValueError: invalid literal for int() with base 10: 'aaaaa'
>>>
===== Gérer une exception =====
L'instruction qui a généré une exception est l'instruction **int()**. Voici comment gérer l'exception :
nombre = input("Saisissez un nombre : ")
try:
nombre = int(nombre)
except:
print("Erreur, ce n'est pas un nombre.")
* voici ce que donne le 'exécution du programme si on saisit une chaîne de caractères
Saisissez un nombre : aaaa
Erreur, ce n'est pas un nombre.
>>>
**Explications :**
* le bloc d'instructions qui peut générer une exception se met après le **mot-clé try** suivit de **:** (on indique un bloc d'instruction)
* le bloc d'instruction à exécuter en cas d'exception est mis après le **mot-clé except** suivi de **:**
De cette manière on **capture** toutes les exceptions possibles qui peuvent être générées par l'instruction **int()**. Il est possible de préciser l'exception que l'on souhaite gérer c'est à dire celle qui est liée à la conversion de la manière suivante :
nombre = input("Saisissez un nombre : ")
try:
nombre = int(nombre)
except ValueError::
print("Erreur, ce n'est pas un nombre."
===== Else =====
Le bloc **except:** peut aussi être complété par un bloc **else:** s'il aucune exception ne se produit :
nombre = input("Saisissez un nombre : ")
try:
nombre = int(nombre)
except ValueError::
print("Erreur, ce n'est pas un nombre."
else:
print("Bien vous avez saisi un entier")
===== Finally ====
**finally** est un bloc qui est exécuté **après** que tous les autres blocs aient été exécutés, peu importe qu’il y ait eu une exception ou non.
nombre = input("Saisissez un nombre : ")
try:
nombre = int(nombre)
except ValueError::
print("Erreur, ce n'est pas un nombre."
else:
print("Bien vous avez saisi un entier")
finally:
print("Nous continuons le programme")
L'affichage "**Nous continuons le programme**" sera toujours affiché.
==== Retour au cours : Les instructions du langage Python ====
* [[.:c_langage_python|Cours : Les instructions du langage Python]]