Erreur Python : ZeroDivisionError

NSI Première

Définition

La `ZeroDivisionError` survient quand on divise par zéro, ce qui est mathématiquement impossible. Le message dépend de l'opérateur utilisé : `division by zero` pour la division `/`, `integer division or modulo by zero` pour la division entière `//`, `integer modulo by zero` pour le modulo `%`, et `float division by zero` avec des flottants. La cause la plus fréquente n'est pas un `0` écrit en clair, mais une variable qui vaut 0 au moment du calcul — par exemple la longueur d'une liste vide dans le calcul d'une moyenne.

Exemple corrigé

Énoncé

Voici un code qui déclenche cette erreur :

```python
def moyenne(notes):
return sum(notes) / len(notes)

notes_eleve = []
print(moyenne(notes_eleve))
```

À l'exécution, Python s'arrête et affiche :

```
ZeroDivisionError: division by zero
```

Solution

La cause : la liste `notes_eleve` est vide, donc `len(notes)` vaut `0`. Le calcul `sum(notes) / len(notes)` revient à diviser par zéro, ce que Python interdit.

Code corrigé :

```python
def moyenne(notes):
if len(notes) == 0:
return 0.0 # ou lever une exception, selon le besoin
return sum(notes) / len(notes)

notes_eleve = []
print(moyenne(notes_eleve))
```

On teste si la liste est vide avant de diviser.

Le bon réflexe : avant toute division, demande-toi si le dénominateur peut valoir 0 (liste vide, compteur jamais incrémenté…) et protège le calcul par un test.

Erreurs classiques

  • Croire que `0 / 5` plante : c'est faux, `0 / 5` vaut `0.0`. Seule la division par zéro est interdite.
  • Confondre avec une `TypeError` : `5 / "0"` ne donne pas une `ZeroDivisionError` mais une `TypeError` (on ne divise pas un nombre par du texte).
  • Oublier que le message change selon l'opérateur : `5 // 0` affiche `integer division or modulo by zero`, tandis que `5 % 0` affiche `integer modulo by zero`.

Toutes les notions