HAL Id: cel-02182401
https://hal.archives-ouvertes.fr/cel-02182401
Submitted on 12 Jul 2019HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-entific research documents, whether they are pub-lished or not. The documents may come from teaching and research institutions in France or abroad, or from public or private research centers.
L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des établissements d’enseignement et de recherche français ou étrangers, des laboratoires publics ou privés.
Les exceptions Comment gérer les erreurs en Python
Stéphane Guinard
To cite this version:
Stéphane Guinard. Les exceptions Comment gérer les erreurs en Python. École d’ingénieur. France. 2018. �cel-02182401�
HAL Id: cel-02182401
https://hal.archives-ouvertes.fr/cel-02182401
Submitted on 12 Jul 2019HAL is a multi-disciplinary open access
archive for the deposit and dissemination of sci-entific research documents, whether they are pub-lished or not. The documents may come from teaching and research institutions in France or abroad, or from public or private research centers.
L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des établissements d’enseignement et de recherche français ou étrangers, des laboratoires publics ou privés.
Les exceptions en Python
Stéphane Guinard
To cite this version:
Les exceptions
Comment g´erer les erreurs en Python ?
Division des enseignements en informatique
Rappel : les erreurs
Prenons un fichier contenant le code python suivant :
def u n e _ f o n c t i o n ( a ) :
r e t u r n 1 / a
def u n e _ a u t r e _ f o n c t i o n () : u n e _ f o n c t i o n (0)
Rappel : les erreurs
L’ex´ecution de ce scripte provoque l’erreur suivante :
T r a c e b a c k ( m o s t r e c e n t c a l l l a s t ) : F i l e " s c r i p t . py ", l i n e 7 , in < module > u n e _ a u t r e _ f o n c t i o n () F i l e " s c r i p t . py ", l i n e 5 , in u n e _ a u t r e _ f o n c t i o n u n e _ f o n c t i o n (0) F i l e " s c r i p t . py ", l i n e 2 , in u n e _ f o n c t i o n r e t u r n 1 / a Z e r o D i v i s i o n E r r o r : d i v i s i o n by z e r o
Comment lire les erreurs
Un message d’erreur se lit de bas en haut ! Ainsi on peut remonter la pile des appels.
Erreurs et exceptions
Sous l’erreur ci dessus, se cache en r´ealit´e une exception de type ZeroDivisionError.
Qu’est ce qu’une exception ?
M´ecanisme pour g´erer des erreurs survenues lors de l’ex´ecution d’un programme.
Gestion des exceptions
Pourquoi faut-il g´erer certaines exceptions ? • Apporter une solution `a un probl`eme bloquant • ´Eviter d’interrompre le programme
Il existe d’autres solutions, mais c’est la mani`ere de faire en Python : def u n e _ f o n c t i o n ( a ) : # G e s t i o n de l ’ e r r e u r en a m o n t if a == 0: p r i n t(" D i v i s i o n par 0 i m p o s s i b l e ! ") r e t u r n N o n e e l s e: r e t u r n 1 / a 5
Soulever une exception
Des exceptions sont automatiquement lev´ees par les fonctions built-in de python, cependant, il est possible de lever ses propres exception `a l’aide du mot-clef raise.
def m a _ f o n c t i o n ( age ) : if age < 0: r a i s e V a l u e E r r o r (" ’ age ’ d o i t e t r e p o s i t i f ! ") # s u i t e de la f o n c t i o n > > > m a _ f o n c t i o n ( -2) T r a c e b a c k ( m o s t r e c e n t c a l l l a s t ) : F i l e " < i n t e r a c t i v e input > ", l i n e 1 , in < module > F i l e " < i n t e r a c t i v e input > ", l i n e 3 , in m a _ f o n c t i o n V a l u e E r r o r : ’ age ’ d o i t e t r e p o s i t i f !
Traiter une exception
On utilise la combinaison de mots-clef try/except pour cr´eer des blocs d’instructions, o`u les instructions pouvant mener `a une erreur, pourront ˆetre g´er´ees.
try: # ce qui p e u t p r o d u i r e une e x c e p t i o n e x c e p t N o m E x c e p t i o n : # ce qu ’ il f a u t f a i r e si l ’ e x c e p t i o n se d ´e c l a n c h e 7
Traiter une exception
On utilise la combinaison de mots-clef try/except pour cr´eer des bloques d’instructions o`u les instructions pourront ˆetre g´er´ees. Exemple : l i s t e = [’ t o t o ’, ’ t i t i ’, ’ t a t a ’. . . ] i = int(i n p u t() ) try: c h o i x = l i s t e [10 // i ] e x c e p t Z e r o D i v i s i o n E r r o r : p r i n t(" D i v i s i o n par z e r o i m p o s s i b l e ") c h o i x = l i s t e [0] e x c e p t I n d e x E r r o r : p r i n t(" P r o b l e m e d ’ i n d e x ") c h o i x = l i s t e [len( l i s t e ) ]
Traiter une exception
Mots-clef finally et else :
try: # ce qui p e u t p r o d u i r e une e x c e p t i o n e x c e p t N o m E x c e p t i o n : # ce qu ’ il f a u t f a i r e si l ’ e x c e p t i o n se d ´e c l e n c h e e l s e: # ce qu ’ il f a u t f a i r e si a u c u n e e x c e p t i o n n ’ a ´ e t ´e lev ´e e f i n a l l y:
# ce qui s e r a ex ´e cut ´e d a n s t o u s les cas
Traiter une exception
Mots-clef finally et else : Exemple : try: f = o p e n(’ f i c h i e r . txt ’, ’ w ’) # ´e c r i t u r e d a n s le f i c h i e r e x c e p t I O E r r o r : p r i n t(" P r o b l e m e l o r s de l ’ ´e c r i t u r e du f i c h i e r ") e l s e: p r i n t(" E c r i t u r e OK ") f i n a l l y: f . c l o s e ()
Cas des fichiers
Astuce contre les oublis de fermeture, le mot-clef with :
try: w i t h o p e n(’ f i c h i e r . txt ’, ’ w ’) as f : # ´e c r i t u r e d a n s le f i c h i e r e x c e p t ( IOError , F i l e N o t F o u n d E r r o r ) : # g ´e rer l ’ e r r e u r 11
Exceptions fr´equentes
• NameError : variable ou fonction manipul´ee non d´eclar´ee • TypeError : type de la variable incoh´erent avec l’op´eration
demand´ee
• ValueError : le type est correct, mais pas la valeur • ZeroDivisionError : division par z´ero
• IndexError / KeyError : tentative d’acc`es `a une s´equence/dictionnaire avec un indice/cl´e inexistant • FileNotFoundError : le fichier n’existe pas
• IOError : erreur lors de la manipulation d’un fichier