Exercices sur la mise au point d'un programme
Flash card 1
script 1
a = 1
for i in range(3):
print("i = {}, a = {}".format(i, a)
a = 2 * a
message d'exception
Pour le script 1 précédent:
Quel message d'exception est levé?
Choisir:
A- SyntaxError
B- IndentationError
C- NameError
D- AttributeError
E- IndexError
Réponse
Reponse A : SyntaxError(à la ligne 3, il manque une parenthèse)
Flash card 2
script 2
v = 1
while v < 100:
if v% 7 == 0:
print(v, "est un multiple de 7")
else:
print(v, "n’est pas un multiple de 7")
v = v + 1
message d'exception
Pour le script 2 précédent:
Quel message d'exception est levé?
Choisir:
A- SyntaxError
B- IndentationError
C- NameError
D- AttributeError
E- IndexError
Réponse
Reponse B : IndentationError(à la ligne 5)
Flash card 3
script 3
f = [0, 1, 0, 0, 0, 0, 0, 0, 0]
for i in range(0, 9):
if i>0: f[i + 1] = f[i] + f[i - 1]
print(f)
message d'exception
Pour le script 1 précédent:
Quel message d'exception est levé?
Choisir:
A- SyntaxError
B- IndentationError
C- NameError
D- AttributeError
E- IndexError
F- il n'y a aucun message d'exception qui est levé.
Réponse
Reponse E : IndexError(à la ligne 3, on ne pourra pas calculer f[i+1] pour i=8 car il n'y a pas de rang 9)
Flash card 4
Pour chacune des propositions, choisir VRAI ou FAUX.Vrai/Faux
A- Une assertion échoue si l’expression booléenne qui suit le mot clé assert est fausse. Si elle est vraie, l’exécution continue sans erreur.
B- `assert div!=0, 'division par zero'` va stopper le programme et afficher 'division par zero' si div est différent de zero.
C- Le module unittest permet de vérifier si les exemples mis dans le docstring de la fonction sont justes, en les testant.
D- Dans un test du module unittest, lorsque l'on veut tester si 2 valeurs sont égales, on utilise la fonction assertEqual
Réponse
A- VraiB- Faux. Le programme stoppe si div est EGAL à zero.
C- Faux. C'est le module doctest qui peut le faire, pas unittest
D- Vrai
Flash card 5
script 4
def divise(a,b):
return a/b
Si on execute l'instruction suivante: divise(10,0)
, la console affiche:
ZeroDivisionError Traceback (most recent call last)
<ipython-input-30-8044e08140eb> in <module>
----> 1 print(divise(10,0))
<ipython-input-29-8590a608aa42> in divise(a, b)
1 def divise(a,b):
----> 2 return a/b
ZeroDivisionError: division by zero
On procède différement: on appele maintenant cette fonction divise
avec un mecanisme try-except
:
mécanisme d'exception
Qu'est ce qui est affiché dans la console lorsque l'on execute le script suivant?
try:
   print(divise(10,0))
except ZeroDivisionError as err:
   print('Handling run-time error:', err)
Réponse
Handling run-time error: division by zeroCar l'exception est capturée et c'est le bloc except qui est executé.
Flash card 6
script 5
annee = input() # L'utilisateur saisit l'année
annee = int(annee) # On tente de convertir l'année
if annee<=0:
raise ValueError("l'année saisie est négative ou nulle")
print('ca continu')
Levée d'exception avec RAISE
1. Dans la boite input, l'utilisateur entre la valeur -4. Le programme s'arrête t-il?
2. Quel est le message affiché en console ?
Réponses
1. Oui, le programme s'arrête: Raise lève une exception.2. ValueError: l'année saisie est négative ou nulle
Flash card 7
script 6
annee = input() # L'utilisateur saisit l'année
try:
annee = int(annee) # On tente de convertir l'année
if annee<=0:
raise ValueError("année saisie est négative ou nulle")
except ValueError:
print("Valeur saisie invalide (l'année est peut-être négative, ou nulle).")
raise try except: Priorité?
1. Dans la boite input, l'utilisateur entre la valeur -9. Le programme s'arrête t-il?
2. Quel est le message affiché en console ?
Réponses
1. Non, le programme continue. Le mécanisme try-except capture l'exception et execute le bloc except. Puis continue.2. Valeur saisie invalide (l'année est peut-être négative).