Que fait moyenne([]) avec l'assertion du cours ? Et sans elle ?
Exercice d'entraînement · niveau 1 (application) · NSI (première), chapitre 7 — Parcourir, trier, prouver · Parcours, occurrences, cas limites
Énoncé
Que fait moyenne([]) avec l'assertion du cours ? Et sans elle ? Laquelle des deux pannes préférez-vous, et pourquoi ?
Corrigé
| avec l'assertion | `AssertionError: tableau vide` |
|---|---|
| sans l'assertion | `ZeroDivisionError: division by zero` |
Les deux s'arrêtent — c'est déjà l'essentiel. Aucune des deux ne rend un résultat faux : la panne est bruyante dans les deux cas. C'est infiniment mieux que le t[-1] de la banque précédente, qui, lui, se tait.
L'assertion est pourtant préférable, pour trois raisons.
- Elle nomme le problème : « tableau vide » désigne la cause, tandis que « division par zéro » désigne un symptôme survenu trois lignes plus loin.
- Elle échoue tout de suite, à la première ligne, avant tout calcul. Sur une fonction plus longue, l'écart entre la cause et le symptôme peut être de vingt lignes.
- Elle documente : lire l'assertion, c'est lire la précondition. La docstring et le code disent la même chose, et ne peuvent pas diverger.
Une nuance de taille. Une assertion n'est pas une gestion d'erreur : elle sert à attraper un défaut du programme, pas une entrée utilisateur invalide. Si le tableau vide peut venir d'un fichier — donc de l'extérieur —, ce n'est plus une assertion qu'il faut, mais un test explicite et un message à l'utilisateur. L'assertion protège du programmeur, pas de l'utilisateur.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.