Protéger son programme☘
Jusqu'à présent, nous avons considéré que l'utilisateur d'un programme était intelligent et respectait les préconditions indiquées dans le docstring... mais ce n'est pas toujours le cas.
Il est possible de renforcer cette précondition en la testant directement au début du code de la fonction.
Pour cela, on utilise l'instruction assert
:
1 |
|
Cette instruction sera surtout utile pour tester le type des variables entrées en paramètres.
Exemple - Assertion sur les types☘
On considère à nouveau la fonction contient_e()
étudiée dans les pages précédentes.
-
Utilisez une assertion pour tester que le paramètre saisi est bien une chaîne de caractères.
1 2 3 4 5 6 7 8 9 10 11
def contient_e(mot): """ mot – str Sortie: bool – True si mot contient 'e', False sinon """ assert ………………………………………………………………………………………………………………………………………… if 'e' in mot: return True else: return False
Une solution
1 2 3 4 5 6 7 8 9 10 11
def contient_e(mot): """ mot – str Sortie: bool – True si mot contient 'e', False sinon """ assert isinstance(mot, str), f"Le paramètre {mot} doit être une chaîne de caractères." if 'e' in mot: return True else: return False
-
Testez ensuite ce code dans la console :
>>> contient_e('abcd') >>> contient_e(17)
Une solution
>>> contient_e('abcd') False >>> contient_e(17) ----> 7 assert isinstance(mot, str), f"Le paramètre {mot} doit être une chaîne de caractères." AssertionError: Le paramètre 17 doit être une chaîne de caractères.
Exemple - Assertion sur les valeurs☘
On considère la fonction racine_carree()
qui doit renvoyer la racine carrée de la valeur (numérique) saisie en paramètre.
-
Complétez l'assertion (les pointillés) de la fonction pour vérifier que le paramètre
nb
est un nombre positif ou nul.1 2 3 4 5 6 7
def racine_carree(nb): """ nb - float (ou int) positif ou nul Sortie : float (ou int), la racine carrée de nb """ assert ..., "le paramètre nb doit être positif ou nul" return nb**0.5
Une solution
1 2 3 4 5 6 7
def racine_carree(nb): """ nb - float (ou int) positif ou nul Sortie : float (ou int), la racine carrée de nb """ assert nb >= 0, "le paramètre nb doit être positif ou nul" return nb**0.5
-
Testez cette fonction en choisissant plusieurs valeurs de
nb
, entières ou flottantes, positives ou négatives.Tests possibles
Voici quelques exemples de tests :
>>> racine_carree(6.25) 2.5 >>> racine_carree(-5) ----> 6 assert nb >= 0, "le paramètre nb doit être positif ou nul" 7 return nb**0.5 AssertionError: le paramètre nb doit être positif ou nul
Remarque☘
Il est possible de cumuler les conditions grâce aux opérateurs logiques
and
et or
.
Exemple
1 2 3 4 5 6 7 |
|