La déclaration d'augmentation permet au programmeur de forcer l'augmentation d'une exception particulière. Par exemple :
>>> Augmenter NameError('HeyDu')
Traceback (dernier appel du dernier appel) :
Fichier "<stdin>", ligne 1, dans ?
NomErreur : HeyDu
Le seul argument du mot-clé raise spécifie l'exception à supprimer. Il doit s'agir d'une instance d'exception ou d'une classe d'exception (une classe qui hérite de l'exception).
Si vous voulez savoir si une exception a été levée mais que vous ne voulez pas la gérer, une forme plus simple de l'instruction d'ascenseur vous permet de lever à nouveau une exception :
>>> Essayez-le :
.... lift NameError('HeyDu')
... sauf NameError :
... print ("Une exception est passée !")
... augmentation
...
Une exception est passée !
Traceback (dernier appel du dernier appel) :
Fichier "<stdin>", ligne 2, dans ?
NomErreur : HeyDu
Exceptions définies par l'utilisateur
Les programmes peuvent nommer leurs exceptions en créant une nouvelle classe d'exceptions (voir Classes pour plus d'informations sur les classes Python). Par défaut, les exceptions doivent hériter directement ou indirectement de la classe Exception. Par exemple :
>>> Classe MyError :
.......def __init__(auto, valeur) :
... auto.value = valeur
... return return return repr(auto.value)
...
Essai >>>>> Essai :
.... augmenter MyError(2*2)
.... sauf MyError comme e :
.... print("Mon exception a été levée, valeur:', e.value)
...
Mon exception a été augmentée, valeur: : 4
>>> Augmenter MyError('ups!')
Traceback (dernier appel du dernier appel) :
Fichier "<stdin>", ligne 1, dans ?
MyError:'up !
Dans cet exemple, la méthode __init__() de la classe Exception a été remplacée. Lors de la création de modules pouvant provoquer diverses erreurs, une classe de base est souvent définie pour les exceptions de ce module et toutes les autres exceptions pour les cas spéciaux d'erreurs héritées de cette classe de base :
erreur de classe (exception) :
Classe de base pour les exceptions dans ce module.
laissez-passer
classe InputError(Error) :
"L'exception est levée pour les erreurs de saisie.
Attributs :
expression -- expression d'entrée où l'erreur s'est produite
message -- explication de l'erreur
"""
def __init__(moi, expression, message) :
self.expression = expression
self.message = message
classe TransitionError(Error) :
"Élevé lorsqu'une opération tente une transition d'état qui n'est pas
la permission.
Attributs :
état précédent -- état au début de la transition
ensuite -- tentative d'un nouvel état
message -- explication de la raison pour laquelle la transition spécifique n'est pas autorisée:
"""
def __init__(auto, précédent, suivant, suivant, suivant, message) :
auto.previous = précédent = précédent = précédent
auto.next = suivant
self.message = message
Les exceptions sont généralement signalées par des noms se terminant par "Erreur", semblables aux noms des exceptions standard.
De nombreux formulaires standard définissent leurs exceptions pour signaler les erreurs qui peuvent survenir dans leurs fonctions.
Définition des actions de nettoyage
L'instruction d'essai connaît un autre bloc optionnel qui est destiné aux actions de nettoyage qui doivent être effectuées dans chaque cas. Par exemple :
>>> Test :
.... lever le pavé numériqueInterrompre le pavé numérique
...enfin :
... appuyez sur ('Au revoir, le monde!')
...
Au revoir, le monde !
Interruption du clavier
Traceback (dernier appel du dernier appel) :
Fichier "<stdin>", ligne 2, dans ?
Le dernier bloc est toujours exécuté avant l'abandon de l'instruction de test, qu'une exception soit survenue ou non. Si une exception a été levée dans le bloc de test qui n'est pas traité dans un bloc sauf (ou dans un bloc sauf ou dans un autre bloc), elle est levée à nouveau après l'exécution du dernier bloc. Le bloc est finalement exécuté même si un autre bloc de l'instruction test a été abandonné par une pause, poursuite ou retour. Un exemple plus compliqué :
>>>>> def divide(x, y) :
... Essayez-le :
... résultat = x / y
... sauf ZeroDivisionError :
... print ("Division pour zéro !")
... autre :
.... print("Le résultat est :", résultat)
...enfin :
.... print("Run finally-Block out")
...
>>>> diviser(2, 1)
Le résultat est : 2.0
Enfin, exécutez le bloc
>>>>> Dividende (2,0)
Division par zéro !
Enfin, exécutez le bloc
>>> Diviser ("2", "1")
Enfin, exécutez le blocage
Traceback (dernier appel du dernier appel) :
Fichier "<stdin>", ligne 1, dans ?
Dossier "<stdin>", ligne 3, en division
TypeError : type(s) d'opérande non supporté(s) pour /:'str' et'str' et'str' et'str'.
Comme vous pouvez le voir, le dernier bloc est