3. Gestion des bugs

1) Erreurs les plus courantes en Python

Lors de l'écriture de code Python, vous ferez fréquemment des erreurs, qui vous serons «gentiment» rappelées par l'interpréteur Python à l'exécution du code.

Type d'erreur

Objet Python

Erreurs courantes

Exemple

Erreur de syntaxe

SyntaxError

Erreur de parenthèse, : manquant avant un bloc d'instruction....

len([1,2,3))

Erreurs d'indexation

IndexError

Accès à un index non présent dans une liste. Accès à un index non présent dans une liste, ou un tuple, str...

[12,15,14][4]

Erreurs de nom

NameError

Nom de fonction ou de variable mal orthographié.

print(Bonjour) ou prout("Bonjour")

Erreurs d'indentation

IndentationError

Indentation oubliée, ou trop grande, les blocs sont alors mal délimités.

Erreurs de type

TypeError

Opération impossible entre deux types(str - int). Conversion de type impossible.

"3" * "5"

En général ces erreurs nécessitent de modifier le code pour corriger le «bug».

Parfois ces erreurs "sont prévues" et nécessitent d'être gérées sans arrêter complètement le programme.

Gestion des exceptions avec try : ... except ...

Prenons l'exemple de la gestion d'une entrée utilisateur (on a dit qu'« il fallait s'attendre à tout ... »)

Vous demandez l'âge d'une personne et vous attendez un entier pour vérifier son accès.

Il faut lui reposer la question jusqu'à ce qu'il rentre une valeur conforme à nos attentes.

 

Ouvrez Spyder (ou un autre environnement de développement), saisissez les extraits de code suivants et testez le fonctionnement.

1
age = int(input("Quel âge avez-vous? "))
2
if age >= 13:
3
    print("Vous pouvez vous inscrire")
4
else:
5
    print("Les réseaux sociaux sont interdits aux moins de 13 ans.")  

Si l'utilisateur répond "seize ans", vous obtenez le message d'erreur suivant :

1
try:
2
    age = int(input("Quel âge avez-vous? "))
3
except ValueError:
4
    print("Veuillez entrer votre âge sous forme de chiffres")

Le programme ne renvoie plus d'erreurs et ne s'arrête pas. On peut continuer à demander l'âge sans relancer le programme.

1
Quel âge avez-vous? treize ans
2
Veuillez entrer votre âge sous forme de chiffres

Un while peut permettre de reposer la question en cas de besoin.

1
age = None
2
while not age: 
3
    try:
4
        age = int(input("Quel âge avez-vous? "))
5
    except ValueError:
6
        print("Veuillez entrer votre âge sous forme de chiffres")
7
8
# on est sur d'avoir un age entier ici
9
if age >= 13:
10
    print("Vous pouvez vous inscrire")
11
else:
12
    print("Les réseaux sociaux sont interdits aux moins de 13 ans.")

Voici un exemple d'interaction avec ce programme.

1
Quel âge avez-vous?  treize ans
2
Veuillez entrer votre âge sous forme de chiffres
3
Quel âge avez-vous?  13.5
4
Veuillez entrer votre âge sous forme de chiffres
5
Quel âge avez-vous?  13
6
Vous pouvez vous inscrire