python:bases:exceptions

Sommaire Python et microPython

[Mise à jour le : 30/6/2021]

  • Mots-clés : exceptions, assertions
Les mots ci-dessous sont dits “réservés”. Ils ne peuvent pas être utilisés comme nom de variable. Les mots soulignés sont une nouveauté de Python 3. Les mots en gras sont utilisés dans cette page.
and continue finally is raise
as def for lambda return
assert del from None True
async elif global nonlocal try
await else if not while
break except import or with
class False in pass yield
  • Fonctions natives (built-in)1) utilisées dans les exemples : enumerate(), flush(), open(), print(), ranges(), repr().

Quand Python rencontre une erreur dans le code, il lève une exception. Le traitement de ces exceptions permettra notamment de donner une réponse à une erreur produite par l'action de l'utilisateur (entrée de valeurs, etc.).

1.1 Forme minimale try ... except

*.py
try:
    # Bloc de code à essayer
    pass
except:
    # Bloc qui sera exécuté en cas d'erreur
    pass

Exemple

*.py
age = input("Quel est votre âge ? ")
try:
    age = int(age)
    print("Vous avez", age,"ans")
except:
    print("Erreur lors de la conversion de votre âge !")

Résultat attendu

Quel est votre âge ? 35
Vous avez 35 ans

Quel est votre âge ? ldkfjg
Erreur lors de la conversion de votre âge !
On intercepte toutes les erreurs sans les distinguer.

1.2 Forme complète try ... except ... finally

*.py
try:
    # Bloc de code à essayer
    pass
except <error_1>:
    # Ce bloc sera exécuté si l'erreur = <error_1>
    pass
except <error_2>:
    # Ce bloc sera exécuté si  l'erreur = <error_2>
    pass
except <error_n>:
    # Ce bloc sera exécuté si  l'erreur = <error_n>
    pass
else:
    # Ce bloc sera exécuté si le code du bloc try s'est exécuté sans erreur
    # else souvent omis et bloc placé dans try
    pass
finally:
    # Bloc exécuté qu'il y ait eu des erreurs ou non

Exemple

*.py
num = input("Entrée le numérateur  ")
denom = input("Entrée le dénominateur ")
resultat = 0
try:
    numerateur = int(num)
    denominateur = int(denom)
    resultat = numerateur / denominateur
except NameError:
    print("Le numérateur ou le dénominateur n'ont pas été définis")
except ValueError:
    print("Le numérateur ou le dénominateur possède un type incompatible avec la division.")
except ZeroDivisionError:
    print("Le dénominateur est égal à 0.")
else:
    print("Le résultat de la division est", resultat)
finally:
    print("On poursuit l'exécution du programme")

Résultat attendu

Entrer le numérateur 12
Entrer le dénominateur 2
Le résultat de la division est 6.0
On poursuit l'exécution du programme

Entrer le numérateur 12
Entrer le dénominateur klkl
Le numérateur ou le dénominateur possède un type incompatible avec la division.
On poursuit l'exécution du programme

Entrer le numérateur 12
Entrer le dénominateur 0
Le dénominateur est égal à 0.
On poursuit l'exécution du programme

1.3 Lever une exception

Pour lever une exception on utilise le mot-clé raise.
*.py
raise TypeException("Message à afficher")
Les assertions sont un moyen de s'assurer, avant de continuer , qu'une condition est respectée.

Syntaxe

*.py
assert test

Exemple

*.py
val = input("Saisissez une valeur supérieure à 0 : ")
try:
    val=int(val)
    assert val>0
except ValueError:
    print("Ce n'est pas un nombre")
except AssertionError:
    print("La valeur n'est pas supérieure à 0 !")

Résultat attendu

Saisissez une valeur supérieure à 0 : 6

Saisissez une valeur supérieure à 0 : 0
La valeur n'est pas supérieure à 0 !
Le module doctest recherche des zones de texte ressemblant à des sessions Python interactives et les exécute pour en vérifier le bon fonctionnement. Principe et exemples ici

  • On peut intercepter les erreurs (ou exceptions) levées par le code avec try… except… finally…
  • La syntaxe d'une assertion est assert test.
  • Les assertions lèvent une exception AssertionError si le test échoue.
  • On peut lever une exception grâce au mot-clé raise suivi du type de l'exception et d'un message.


1)
Fonctions toujours disponibles.
  • python/bases/exceptions.txt
  • Dernière modification: 2021/08/11 18:09
  • de phil