Exceptions natives#
Les exceptions sont toujours des instances de classes, et les classes d’exceptions
héritent toujours de la classe 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édéfinies en Python. Ensemble, elles forment une hiérarchie d’exceptions 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 mauvaise conversion :
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’existe pas :
with open("fichier-inexistant.txt", "r") as f:
contenu = f.read()