Exceptions natives

Les exceptions sont toujours des instances de classes, et les classes d’exceptions héritent toujours de la class BaseException.

Le nom de l’exception est en réalité le nom de la classe, ici l’exception levée par la ligne return 1 / 0 est une instance de la classe ZeroDivisionError.

Cette exception fait partie des nombreuses exceptions préféfinies en Python. Ensemble, elles forment une hiérarchie dont voici un extrait:

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- Exception
      +-- ArithmeticError
      |    +-- ZeroDivisionError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- OSError
      |    +-- FileNotFoundError
      +-- TypeError
      +-- ValueError

IndexError et KeyError

IndexError est levée quand on essaye d’accéder à un index trop grand dans une liste:

ma_liste = ["pomme"]
ma_liste[2] = "abricot"

# IndexError: list assignment index out of range

KeyError est levée quand on essaye d’accéder à une clé qui n’existe pas dans un dictionnaire:

scores = { "Alice" : 10 }
score_de_bob = scores["Bob"]

# KeyError: 'Bob'

Notez que la description de KeyError est la valeur de la clé manquante.

ValueError

ValueError est levée (entre autres) quand on tente une maunvaise conversions:

entrée_utilisateur = "pas un nombre"
valeur = int(entrée_utilisateur)

KeyboardInterrupt

KeyboardInterrupt est levée quand on fait ctrl-c.

FileNotFoundError

FileNotFoundError est levée quand on essaye d’ouvrir en lecture un fichier qui n’exsiste pas:

with open("fichier-inexistant.txt", "r") as f:
    contenu = f.read()