Instruction assert dans Python

25 Apr 2019 25 Apr 2019 21681 vues ESSADDOUKI Mostafa 4 min de lecture

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.

Définition — assert 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.

Syntaxe Python
assert condition                      # forme simple
assert condition, "message d'erreur"  # avec message explicatif

En Python, assert condition, message est strictement équivalent à :

if not condition:
    raise AssertionError("message d'erreur")
Erreur fréquente — Ne pas utiliser de parenthèses 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: message

Exemples

Exemple — Assertion simple

x = -5

assert x > 0, f"x doit être positif, reçu : {x}"
Sortie
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}")
Sortie
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 invalide
Sortie
15.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 :


assertraise Exception
ButDétecter des bugs internes du développeurGérer des erreurs d'exécution prévisibles
Désactivable ?✅ Oui, avec python -O script.py❌ Non
Utilisateur finalNe doit jamais le voirPeut être affiché / géré proprement
Cas d'usagePréconditions, invariants, testsValidation d'entrées, fichiers, réseau
Exempleassert n > 0 en interneraise ValueError("n doit être > 0")
Quand utiliser 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.
Astuce — Désactiver les assertions en production En exécutant Python avec l'option -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.