Tutoriel Python - Gestion des exceptions
Vous apprendrez comment gérer les exceptions Python dans cette section. De plus, vous apprendrez à lever et attraper des exceptions.
Lorsqu’une exception se produit dans un programme, l’exécution du programme est interrompue. Mais la plupart du temps, vous ne préférez pas une interruption anormale du programme, donc vous pouvez utiliser la gestion des exceptions Python pour éviter le plantage de votre programme.
try...except
Dans l’exemple suivant, on demande à l’utilisateur de saisir 10 entiers. Si l’utilisateur entre un autre type plutôt que des entiers, une exception sera levée et les instructions dans le bloc except
seront exécutées:
>>> n = 10
>>> i = 1
>>> sum = 0
>>> while i <= n:
try:
num = int(input('Enter a number: '))
sum = sum + num
i = i+1
except:
print('Please enter an integer!!')
break
Enter a number: 23
Enter a number: 12
Enter a number: Asd
Please enter an integer!!
>>> print('Sum of numbers =', sum)
Sum of numbers = 35
Vous pouvez aussi attraper des exceptions spécifiées, par exemple, si la division par zéro se produit, vous pouvez attraper l’exception correspondante comme:
try:
# statements
except ZeroDivisionError:
# exception handling
except:
# all other exceptions are handled here
Exception raise
Vous pouvez forcer une exception spécifique à se produire en utilisant le mot-clé raise
:
>>> raise ZeroDivisionError
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
raise ZeroDivisionError
ZeroDivisionError
>>> raise ValueError
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
raise ValueError
ValueError
Si vous avez besoin d’ajouter des informations personnalisées à l’exception auto-relevée, vous pouvez les ajouter dans la parenthèse après le type d’erreur de l’exception.
>>> raise NameError("This is a customized exception")
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
raise NameError("This is a customized exception")
NameError: This is a customized exception
try...finally
Le bloc finally
est optionnel dans le bloc try
. S’il y a un bloc finally
, il sera exécuté dans tous les cas.
Ceci est démontré dans l’exemple ci-dessous:
>>> try:
raise ValueError
finally:
print('You are in finally block')
You are in finally block
Traceback (most recent call last):
File "<pyshell#23>", line 2, in <module>
raise ValueError
ValueError
Le bloc try...finally
est utilisé pour les actions de nettoyage comme lorsque l’on travaille avec un fichier, c’est une bonne pratique de fermer le fichier. Ainsi, le fichier sera fermé dans le bloc finally
.
Exceptions intégrées à Python
Dans cette section, vous apprendrez les exceptions standards de la programmation Python.
Les exceptions sont les erreurs d’exécution qui sont soulevées lors de l’interprétation. Par exemple, la division d’un nombre quelconque par zéro créera une erreur d’exécution appelée ZeroDivisionError
.
En Python, il y a quelques exceptions intégrées qui sont décrites ci-dessous:
Exception | Quand il est levé ? |
---|---|
AssertionError |
quand la déclaration assert est échouée |
AttributeError |
lorsque la référence de l’attribut est défaillante |
EOFError |
quand aucune donnée n’est lue par les fonctions input() et que la fin du fichier est atteinte. |
FloatingPointError |
lorsque le calcul en virgule flottante échoue |
GeneratorExit |
Lorsqu’un coroutine ou un générateur est fermé, une exception GeneratorExit se produit |
ImportError |
quand import ne trouve pas le module |
ModuleNotFoundError |
lorsque le module n’est pas trouvé par import . Cette exception est une sous-classe de ImportError . |
IndexError |
quand l’index d’une séquence n’est pas à portée. |
KeyError |
lorsqu’une clé de dictionnaire n’est pas trouvée dans le dictionnaire |
KeyboardInterrupt |
lorsqu’une touche d’interruption est actionnée. |
MemoryError |
lorsqu’il y a moins de mémoire pour une opération donnée |
NameError |
quand une variable n’est pas trouvée |
NotImplementedError |
lorsque l’implémentation de la méthode abstraite est nécessaire mais non fournie. |
OSError |
lorsqu’une erreur système est rencontrée |
OverFlowError |
quand une valeur est trop grande pour être représentée. |
RecursionError |
lorsque la limite de récursion dépasse le nombre maximum |
IndentationError |
lorsque l’indentation est correctement spécifiée pour la définition de toute fonction, classe, etc. |
SystemError |
lorsqu’une erreur liée au système est trouvée |
SystemExit |
quand sys.exit() est utilisé pour quitter l’interpréteur. |
TypeError |
lorsqu’une opération n’est pas valide pour le type de données spécifié |
ValueError |
lorsqu’une fonction intégrée a des arguments valides mais que les valeurs fournies ne sont pas valides. |
RunTimeError |
lorsque l’erreur générée n’entre dans aucune autre catégorie |
IOError |
lorsqu’une opération d’E/S échoue. |
Erreur locale non liée | lorsque la variable locale est accédée mais n’a pas de valeur |
UnBoundLocalError |
lorsqu’il y a une erreur de syntaxe |
TabError |
lorsqu’il y a une indentation inutile de l’onglet |
UnicodeError |
lorsqu’une erreur liée à Unicode est rencontrée |
UnicodeEncodeError |
lorsqu’une erreur liée à Unicode est rencontrée en raison de l’encodage |
UnicodeDecodeError |
lorsqu’une erreur liée à Unicode est rencontrée en raison du décodage |
UnicodeTranslateError |
lorsqu’une erreur liée à Unicode est rencontrée en raison de la traduction |
ZeroDivisionError |
lorsqu’un nombre est divisé par zéro |
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook