• Aucun résultat trouvé

Les exceptions Comment gérer les erreurs en Python

N/A
N/A
Protected

Academic year: 2021

Partager "Les exceptions Comment gérer les erreurs en Python"

Copied!
14
0
0

Texte intégral

(1)

HAL Id: cel-02182401

https://hal.archives-ouvertes.fr/cel-02182401

Submitted on 12 Jul 2019

HAL 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�

(2)

HAL Id: cel-02182401

https://hal.archives-ouvertes.fr/cel-02182401

Submitted on 12 Jul 2019

HAL 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:

(3)

Les exceptions

Comment g´erer les erreurs en Python ?

Division des enseignements en informatique

(4)

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)

(5)

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.

(6)

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.

(7)

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

(8)

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 !

(9)

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

(10)

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 ) ]

(11)

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

(12)

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 ()

(13)

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

(14)

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

Références

Documents relatifs

To test whether the vesicular pool of Atat1 promotes the acetyl- ation of -tubulin in MTs, we isolated subcellular fractions from newborn mouse cortices and then assessed

Néanmoins, la dualité des acides (Lewis et Bronsted) est un système dispendieux, dont le recyclage est une opération complexe et par conséquent difficilement applicable à

Cette mutation familiale du gène MME est une substitution d’une base guanine par une base adenine sur le chromosome 3q25.2, ce qui induit un remplacement d’un acide aminé cystéine

En ouvrant cette page avec Netscape composer, vous verrez que le cadre prévu pour accueillir le panoramique a une taille déterminée, choisie par les concepteurs des hyperpaysages

Chaque séance durera deux heures, mais dans la seconde, seule la première heure sera consacrée à l'expérimentation décrite ici ; durant la seconde, les élèves travailleront sur

A time-varying respiratory elastance model is developed with a negative elastic component (E demand ), to describe the driving pressure generated during a patient initiated

The aim of this study was to assess, in three experimental fields representative of the various topoclimatological zones of Luxembourg, the impact of timing of fungicide

Attention to a relation ontology [...] refocuses security discourses to better reflect and appreciate three forms of interconnection that are not sufficiently attended to