Contactez-nous

Exceptions (TypeError, ValueError, IndexError, KeyError...)

Découvrez les exceptions courantes en Python (TypeError, ValueError, IndexError, KeyError, etc.). Apprenez à identifier les types d'erreurs d'exécution et à comprendre leurs causes.

Qu'est-ce qu'une exception ? Une erreur d'exécution

En Python, une exception est une erreur qui se produit pendant l'exécution d'un programme. Contrairement aux erreurs de syntaxe (SyntaxError), qui sont détectées avant l'exécution, les exceptions se produisent *pendant* l'exécution, lorsque le programme rencontre une situation qu'il ne sait pas gérer.

Lorsqu'une exception se produit, le flux normal du programme est interrompu. Si l'exception n'est pas gérée (voir la section suivante sur `try...except`), le programme se termine et Python affiche un message d'erreur.

Les exceptions sont des objets en Python. Elles appartiennent à des classes d'exceptions (comme `TypeError`, `ValueError`, etc.), qui héritent toutes de la classe de base `BaseException`.

Il existe de nombreuses exceptions prédéfinies en Python, et vous pouvez également créer vos propres exceptions.

TypeError : opérations ou fonctions appliquées à un type incorrect

`TypeError` est l'une des exceptions les plus courantes en Python. Elle est levée lorsqu'une opération ou une fonction est appliquée à un objet d'un type inapproprié.

Exemples :

x = 5
y = "Bonjour"

# print(x + y)  # TypeError: unsupported operand type(s) for +: 'int' and 'str'

# print(len(x))   # TypeError: object of type 'int' has no len()

# def ma_fonction(a, b):
#    return a + b
# ma_fonction(1, [2,3]) # TypeError: unsupported operand type(s) for +: 'int' and 'list'

Causes courantes de `TypeError` :

  • Essayer d'effectuer une opération arithmétique entre un nombre et une chaîne de caractères.
  • Appeler une fonction avec un argument d'un type incorrect.
  • Essayer d'utiliser une méthode qui n'est pas définie pour un type donné (par exemple, appeler `len()` sur un entier).
  • Essayer de modifier un objet immuable.

ValueError : valeur inappropriée pour un type donné

`ValueError` est levée lorsqu'une fonction reçoit un argument du bon type, mais avec une valeur inappropriée.

Exemples :

# int("abc")  # ValueError: invalid literal for int() with base 10: 'abc'

# import math
# math.sqrt(-1) # ValueError: math domain error

# liste = [1, 2, 3]
# liste.remove(4) #ValueError: list.remove(x): x not in list

Causes courantes de `ValueError` :

  • Essayer de convertir une chaîne de caractères en un nombre, mais la chaîne ne représente pas un nombre valide.
  • Passer une valeur en dehors de l'intervalle acceptable à une fonction (par exemple, une racine carrée d'un nombre négatif).
  • Essayer de supprimer un élément d'une liste qui ne contient pas cet élément.

IndexError : indice hors limites

`IndexError` est levée lorsque vous essayez d'accéder à un élément d'une séquence (comme une liste, un tuple, ou une chaîne de caractères) avec un indice qui est en dehors des limites valides (soit négatif et trop petit, soit supérieur ou égal à la longueur de la séquence).

Exemples :

ma_liste = [1, 2, 3]

# print(ma_liste[3])  # IndexError: list index out of range

# print(ma_liste[-4]) # IndexError: list index out of range

chaine = "abc"
# print(chaine[3])   # IndexError: string index out of range

Causes courantes d'`IndexError` :

  • Essayer d'accéder à un élément avec un indice trop grand (supérieur ou égal à la longueur de la séquence).
  • Essayer d'accéder à un élément avec un indice négatif trop petit (inférieur à `-len(sequence)`).
  • Erreur de calcul dans l'indice.

KeyError : clé introuvable dans un dictionnaire

`KeyError` est levée lorsque vous essayez d'accéder à une clé qui n'existe pas dans un dictionnaire.

Exemples :

mon_dictionnaire = {"a": 1, "b": 2}

# print(mon_dictionnaire["c"])  # KeyError: 'c'

Causes courantes de `KeyError` :

  • Faute de frappe dans le nom de la clé.
  • Essayer d'accéder à une clé qui a été supprimée du dictionnaire.
  • Erreur de logique dans le code.

Pour éviter `KeyError`, vous pouvez utiliser la méthode `get()` du dictionnaire, qui retourne une valeur par défaut si la clé n'existe pas, ou vérifier si la clé existe avec l'opérateur `in`.

Autres exceptions courantes (liste non exhaustive)

Voici une liste non exhaustive d'autres exceptions courantes en Python :

  • `NameError` : Une variable n'est pas définie (vous essayez d'utiliser un nom qui n'a pas été affecté à une valeur).
  • `AttributeError` : Un objet n'a pas l'attribut ou la méthode que vous essayez d'utiliser.
  • `FileNotFoundError` : Un fichier que vous essayez d'ouvrir n'existe pas.
  • `IOError` : Une erreur d'entrée/sortie se produit (par exemple, lors de la lecture ou de l'écriture d'un fichier).
  • `ZeroDivisionError` : Division par zéro.
  • `ImportError` : Impossible d'importer un module ou un nom à partir d'un module.
  • `AssertionError` : Une instruction `assert` échoue.
  • `RecursionError` Dépassement du nombre maximal d'appels récursifs imbriqués.
  • `KeyboardInterrupt` : L'utilisateur a interrompu l'exécution du programme (généralement avec Ctrl+C).
  • `StopIteration` Fin de l'itération (levée par un itérateur)

Il est important de se familiariser avec les exceptions courantes pour pouvoir les identifier et les gérer efficacement. La documentation Python fournit une liste complète des exceptions intégrées : docs.python.org/3/library/exceptions.html