Tutoriel Python - Gestion des exceptions

Jinku Hu 30 janvier 2023
  1. try...except
  2. Exception raise
  3. try...finally
  4. Exceptions intégrées à Python
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
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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