L'instruction assert
L'instruction assert existe dans presque tous les langages de programmation. Elle aide à détecter les problèmes tôt dans l'exécution, là où la cause est claire, plutôt que plus tard comme effet secondaire d'une autre opération.
assert teste une condition et lève immédiatement une AssertionError si elle est fausse. C'est un outil de vérification d'invariants : préconditions, postconditions, cohérence des données en cours d'exécution.assert condition # forme simple
assert condition, "message d'erreur" # avec message explicatifEn Python, assert condition, message est strictement équivalent à :
if not condition:
raise AssertionError("message d'erreur")assert est une instruction, pas une fonction. Ne jamais écrire assert(condition, message) : Python interpréterait cela comme assert (condition, message), c'est-à-dire assert tuple, qui est toujours vrai(un tuple non vide est truthy) et ne teste donc jamais rien !# ❌ Incorrect — ne lève JAMAIS d'erreur
assert(False, "message") # assert d'un tuple → toujours True !
# ✅ Correct
assert False, "message" # lève AssertionError: messageExemples
Exemple — Assertion simple
x = -5
assert x > 0, f"x doit être positif, reçu : {x}"AssertionError: x doit être positif, reçu : -5
Exemple — Vérification avant traitement
La fonction find vérifie d'abord que le tableau n'est pas vide avant de rechercher un élément.
def find(tab, x):
assert len(tab) > 0, "Tableau est vide"
return x in tab
try:
print(find([1, 3, 5], 3)) # True
print(find([], 2)) # AssertionError
except AssertionError as e:
print(f"[AssertionError] {e}")True [AssertionError] Tableau est vide
Exemple — Vérification de préconditions et postconditions
def calculer_moyenne(notes):
assert isinstance(notes, list), "notes doit être une liste"
assert len(notes) > 0, "La liste de notes est vide"
assert all(0 <= n <= 20 for n in notes), "Une note est hors de [0, 20]"
moyenne = sum(notes) / len(notes)
assert 0 <= moyenne <= 20, "Postcondition : moyenne hors intervalle"
return moyenne
print(calculer_moyenne([12, 15, 18])) # 15.0
print(calculer_moyenne([])) # AssertionError : liste vide
print(calculer_moyenne([10, 25, 14])) # AssertionError : note invalide15.0 [AssertionError] La liste de notes est vide [AssertionError] Une note est hors de [0, 20]
assert vs exceptions
assert et les exceptions (raise) semblent similaires, mais ont des rôles distincts :
assert | raise Exception | |
|---|---|---|
| But | Détecter des bugs internes du développeur | Gérer des erreurs d'exécution prévisibles |
| Désactivable ? | ✅ Oui, avec python -O script.py | ❌ Non |
| Utilisateur final | Ne doit jamais le voir | Peut être affiché / géré proprement |
| Cas d'usage | Préconditions, invariants, tests | Validation d'entrées, fichiers, réseau |
| Exemple | assert n > 0 en interne | raise ValueError("n doit être > 0") |
assert ?- ✅ Vérifier des invariants internes (préconditions, postconditions).
- ✅ Documenter des hypothèses sur l'état du programme.
- ✅ Détecter rapidement des bugs de logique en développement.
- ❌ Ne jamais valider des entrées utilisateur avec
assert(peut être désactivé avec-O). - ❌ Ne jamais gérer des erreurs métier attendues avec
assert.
-O (optimize), toutes les instructions assert sont ignorées, ce qui améliore légèrement les performances :# Exécution normale — assertions actives
python script.py
# Exécution optimisée — assertions désactivées
python -O script.py
Discussion (0)
Soyez le premier à laisser un commentaire !
Laisser un commentaire
Votre commentaire sera visible après modération.