2.2 Exceptions intégrées

Les exceptions peuvent être des objets classe ou des objets chaînes de caractères. Bien que la plupart des exceptions aient été des objets chaînes dans les versions passées de Python, dans Python 1.5 et les versions plus récentes, toutes les exceptions standard ont été converties en objets classe, et les utilisateurs sont encouragés à faire de même. Les exceptions sont définies par le module exceptions. Il n'est jamais nécessaire d'importer explicitement ce module : les exceptions sont fournies dans l'espace de noms intégré.

Deux objets chaîne distincts avec la même valeur sont considérés comme des exceptions différentes. Ceci pour obliger les programmeurs à utiliser des noms d'exceptions plutôt que leur valeur chaîne quand ils spécifient les gestionnaires d'exceptions. La valeur chaîne de toutes les exceptions intégrées est leur nom, mais ceci n'est pas imposé pour les exceptions définies par l'utilisateur ou les exceptions définies par les modules de la bibliothèque.

Pour les exceptions classe, dans une instruction try avec une clause except qui se réfère à une classe particulière, cette clause gère aussi toutes les classes d'exceptions dérivées de cette classe (mais pas les exceptions dont elle est dérivée). Deux classes d'exceptions qui ne sont pas liées par héritage ne sont jamais équivalentes, même si elles ont le même nom.

Les exceptions intégéres listées ci-dessous peuvent être générées par l'interpréteur ou par les fonctions intégrées. Sauf indication contraire, ils ont une ``valeur associée'' indiquant la cause détaillée de l'erreur. Il peut s'agir d'une chaîne ou d'un tuple contenant plusieurs éléments d'information (par exemple, un code d'erreur et une chaîne explicitant ce code). La valeur associée est le second argument de l'instruction raise. Pour les exceptions chaîne, la valeur associée elle-même sera stockée dans la variable nommée en second argument de la clause except (s'il y en a un). Pour les exceptions classe, cette variable reçoit l'instance exception. Si la classe exception est dérivée de la classe racine standard Exception, la valeur associée est présente comme l'attribut args de l'instance exception, et éventuellement dans d'autres attributs.

Le code de l'utilisateur peut déclencher des exceptions intégrées. Ceci peut servir à tester un gestionnaire d'exceptions ou à signaler une condition d'erreur ``tout comme'' dans le cas où l'interpréteur déclenche la même exception; mais méfiez-vous du fait que rien n'empêche le code de l'utilisateur de déclencher une erreur inappropriée.

Les exceptions suivantes ne servent que de classes de base pour d'autres exceptions.

Exception
La classe racine pour les exceptions. Toutes les exceptions intégrées sont dérivées de cette classe. Toutes les exceptions définies par l'utilisateur devraient aussi dériver de cette classe, mais ceci n'est pas (encore) imposé. La fonction str() appliquée à une instance de cette classe (ou à la plupart des classes dérivées) retourne la valeur chaîne du ou des argument(s), ou une chaîne vide si aucun argument n'a été fourni au constructeur. Quand on se sert d'une séquence, on accède ainsi aux arguments donnés au constructeur (c'est pratique pour assurer la compatibilité ascendante avec du code ancien). Les arguments sont aussi disponibles dans l'attribut args de l'instance, sous forme d'un tuple.

StandardError
La classe de base pour toutes les exceptions intégrées, sauf SystemExit. StandardError elle-même est dérivée de la classe racine Exception.

ArithmeticError
La classe de base pour celles des exceptions qui sont déclenchées en cas d'erreurs arithmétiques diverses: OverflowError, ZeroDivisionError, FloatingPointError.

LookupError
La classe de base pour les exceptions déclenchées quand une clé ou un indice dans une table associative ou une séquence sont invalides: IndexError, KeyError.

EnvironmentError
La classe de base pour les erreurs qui peuvent se produire en-dehors du système Python: IOError, OSError. Quand des exceptions de ce type sont créées avec un tuple à deux éléments, le premier élément est disponible dans l'attribut errno de l'instance (on suppose qu'il s'agit d'un numéro d'erreur), et le second élément est disponible dans l'attribut strerror (il s'agit habituellement du message d'erreur associé). Le tuple lui-même est aussi disponible dans l'attribut args. Nouveau en version 1.5.2

Quand une exception EnvironmentError est instanciée avec un triplet, les deux premiers éléments sont disponibles comme ci-dessus, tandis que le troisième est disponible dans l'attribut filename. Cependant, pour assurer la compatibilité ascendante, l'attribut args contient seulement un couple des deux premiers arguments du constructeur.

L'attribut filename vaut None quand cette exception est créée avec autre chose que 3 arguments. Les attributs errno et strerror valent aussi None quand l'instance a été créée avec autre chose que 2 ou 3 arguments. Dans ce dernier cas, args reproduit les arguments du constructeur sous forme d'un tuple.

Les exceptions suivantes sont les exceptions qui sont effectivement déclenchées.

AssertionError
Déclenchée quand une instruction assert échoue.

AttributeError
Déclenchée quand une référence ou une affectation d'attribut échoue. (Quand un objet ne supporte pas les références d'attributs ou les affectations d'attributs, TypeError est déclenchée.)

EOFError
Déclenchée quand une des fonctions intégrées input() ou raw_input() atteint une condition de fin de fichier (EOF) sans avoir lu aucune donnée. (N.B.: les méthodes read() et readline() des objets fichiers retournent une chaîne vide quand ils atteignent EOF.)

FloatingPointError
Déclenchée quand une opération sur un nombre flottant échoue. Cette exception est toujours définie, mais peut seulement être déclenchée quand Python est configuré avec l'option with-fpectl, ou que le symbole WANT_SIGFPE_HANDLER est défini dans le fichier config.h.

IOError
Déclenchée quand une opération d'entrée-sortie (telle qu'une instruction print, la fonction intégrée open() ou une méthode d'un objet fichier) échoue pour une raison relative aux entrées-sorties, par exemple ``fichier non trouvé'' ou ``disque plein''.

Cette classe est dérivée de EnvironmentError. Voir le développement ci-dessus pour plus d'informations sur les attributs des instances exceptions.

ImportError
Déclenchée quand une instruction import ne parvient pas à trouver la définition du module ou quand un from ... import ne parvient pas à trouver un nom qui doit être importé.

IndexError
Déclenchée quand un indice de séquence est en-dehors de l'intervalle. (Les indices de tranches sont tronqués sans prévenir pour entrer dans l'intervalle autorisé; si un indice n'est pas un entier simple, TypeError est déclenchée.)

KeyError
Déclenchée quand une clé de table associative (dictionnaire) n'est pas trouvée dans l'ensemble des clés existantes.

KeyboardInterrupt
Déclenchée quand l'utilisateur appuie sur la touche d'interruption (normalement, Control-C ou DEL). Pendant l'exécution, une vérification d'interruption est effectué régulièrement. La frappe de touches d'interruption quand une fonction intégrée input() ou raw_input()) attend une saisie déclenche aussi cette exception.

MemoryError
Déclenchée quand une opération est à court de mémoire, mais que la situation peut encore être rétablie (en supprimant certains objets). La valeur associée est une chaîne de caractères qui indique quel type d'opération (interne) a été à court de mémoire. Notez qu'en raison de l'architecture de gestion de mémoire sous-jacent (la fonction C malloc()), il se peut que l'interpréteur ne soit pas toujours en mesure de rétablir complètement la situation; néanmoins il déclenche une exception pour qu'une trace de la pile puisse être imprimée, au cas où un programme fugitif était en cause.

NameError
Déclenchée quand un nom local ou global n'est pas trouvé. Ceci s'applique seulement aux noms non qualifiés. La valeur associée est le nom qui n'a pas pu être trouvé.

NotImplementedError
Cette exception est dérivée de RuntimeError. Dans les classes de base définies par l'utilisateur, une méthode abstraite doit déclencher cette exception quand elle a besoin que des classes dérivées la surchargent. Nouveau en version 1.5.2

OSError
Cette classe est dérivée de EnvironmentError et sert surtout comme l'exception os.error du module os. Voir EnvironmentError ci-dessus une description des valeurs associées possibles. Nouveau en version 1.5.2

OverflowError
Déclenchée quand le résultat d'une opération arithmétique est trop grand pour être représenté. Ceci ne peut pas se produire pour les entiers longs (qui préfèrent déclencher une MemoryError que de laisser tomber). A cause de l'absence de standardisation de la gestion des exceptions pour les flottants en C, la plupart des opérations sur les flottants ne sont pas vérifiées non plus. Pour les entiers simples, toutes les opérations qui peuvent déborder sont vérifiées sauf le décalage à gauche, où les opérations préfèrent typiquement laisser tomber des bits plutôt que de déclencher une exception.

RuntimeError
Déclenchée quand une erreur est détectée et qu'elle n'entre dans aucune autre catégorie. La valeur associée est une chaîne de caractères indiquant précisément ce qui est arrivé. (Cette exception est surtout une relique d'une version précédente de l'interpréteur; elle ne sert plus beaucoup.)

SyntaxError
Déclenchée quand l'interpréteur rencontre une erreur de syntaxe. Ceci peut se produire dans une instruction import, dans une instruction exec, dans un appel à la fonction intégrée eval() ou input(), ou en lisant le script initial ou l'entrée standard (y compris en mode interactif).

Quand les exceptions classe sont utilisées, les instances de cette classe ont des attributs filename, lineno, offset et text pour accéder plus facilement aux détails; pour les exceptions chaîne, la valeur associée est généralement un tuple de la forme (message, (filename, lineno, offset, text)). Pour les exceptions classe, str() retourne seulement le message.

SystemError
Déclenchée quand l'interpréteur rencontre une erreur interne, mais que la situation n'a pas l'air assez désespérée pour abandonner tout espoir. La valeur associée est une chaîne qui indique ce qui s'est produit (en termes de bas niveau).

Vous devriez signaler ceci à l'auteur ou au mainteneur de votre interpréteur Python. Veillez à signaler la version de l'interpréteur Python (sys.version; également affichée au début d'une session interactive Python), le message d'erreur exact (la valeur associée à l'exception) et si possible le code source du programme qui a déclenché l'erreur.

SystemExit
Cette exception est déclenchée par la fonction sys.exit(). Quand elle n'est pas gérée, l'interpréteur Python s'arrête; aucune trace de pile n'est affichée. Si la valeur associée est un entier simple, il spécifie le statut de sortie du système (passé à la fonction C exit()); si elle est None, le statut de sortie est zéro; s'il est d'un autre type (tel qu'une chaîne de caractères), la valeur de l'objet est affichée et le statut de sortie vaut un.

Les instances ont un attribut code qui prend pour valeur le statut de sortie ou le message d'erreur proposé (la valeur par défaut est None). Par ailleurs, cette exception dérive directement de Exception et pas de StandardError, puisque ce n'est pas techniquement une erreur.

Un appel à la fonction sys.exit() est traduit en une exception de telle façon que les gestionnaires de nettoyage (les clauses finally des instructions try) puissent être exécutés, et de façon qu'un débogueur puisse exécuter un script sans courir le risque de perdre le contrôle. La fonction os._exit() peut être utilisée s'il est absolument nécessaire de sortir immédiatement (par exemple, après un fork() dans le processus enfant).

TypeError
Déclenchée quand une opération ou fonction intégrées sont appliquées à un objet d'un type inapproprié. La valeur associée est une chaîne de caractères qui donne des détails sur la mauvaise correspondance de type.

UnboundLocalError
Déclenchée quand une référence est faite à une variable locale dans une fonction ou une méthode, mais qu'aucune valeur n'a été liée à cette variable. C'est une sous-classe de NameError. Nouveau en version 2.0

UnicodeError
Déclenchée quand une erreur d'encodage ou de décodage lié à Unicode se produit. C'est une sous-classe de ValueError. Nouveau en version 2.0

ValueError
Déclenchée quand une opération ou une fonction intégrée reçoit un argument qui a le bon type mais une valeur inappropriée, et que la situation n'est pas décrite par une exception plus précise telle que IndexError.

WindowsError
Déclenchée quand une erreur spécifique à Windows se produit ou quand le numéro d'erreur ne correspond pas à une valeur errno. Les valeurs errno et strerror sont créées d'après les valeurs de retour des fonctions GetLastError() et FormatMessage() de la Windows Platform API. C'est une sous-classe de OSError. Nouveau en version 2.0

ZeroDivisionError
Déclenchée quand le second argument d'une division ou d'une opération modulo vaut zéro. La valeur associée est une chaîne indiquant le type des opérandes et l'opération.