StopIteration

Python Erreur courante

Explication

`StopIteration` est l'exception levée par `next()` quand un **itérateur est épuisé** (plus aucun élément). À l'intérieur d'une boucle `for`, Python la gère automatiquement ; elle ne « fuit » que lorsque vous appelez `next()` manuellement sans valeur par défaut. ```python it = iter([1, 2]) next(it) # 1 next(it) # 2 next(it) # plus d'éléments # StopIteration ```

Causes courantes

- **Appel à `next()`** au-delà du dernier élément, sans valeur par défaut. - **Itération manuelle** mal bornée. - **`raise StopIteration` dans un générateur** : depuis Python 3.7, cela devient une `RuntimeError` (PEP 479).

1. Donnez une valeur par défaut à next()

it = iter([1, 2])
valeur = next(it, None)   # None quand l'itérateur est épuisé, pas d'erreur

2. Préférez une boucle for (qui gère l'arrêt)

for valeur in [1, 2]:
    print(valeur)   # StopIteration interceptée automatiquement

3. Dans un générateur, utilisez return, pas raise

def jusqua(n):
    i = 0
    while i < n:
        yield i
        i += 1
    return   # ✅ termine le générateur (ne pas faire raise StopIteration)

Comment prevenir cette erreur

- **Utilisez `next(it, defaut)`** quand vous itérez manuellement. - **Bouclez avec `for`** dès que possible. - Dans les générateurs, terminez par `return` (jamais `raise StopIteration`). - Référence : [docs.python.org — StopIteration](https://docs.python.org/fr/3/library/exceptions.html#StopIteration).

Besoin d'aide sur votre projet ?

Besoin d'aide sur un probleme technique ? Decrivez-le pour des recommandations.

Nous contacter

Questions frequentes

Pourquoi `for` ne déclenche-t-il jamais cette erreur ?
Parce que la boucle `for` intercepte `StopIteration` pour savoir quand s'arrêter : c'est son fonctionnement normal. L'erreur n'apparaît que si vous appelez `next()` vous-même sans valeur de repli.
Pourquoi `raise StopIteration` dans mon générateur provoque une `RuntimeError` ?
À cause de la PEP 479 (Python 3.7+) : lever explicitement `StopIteration` dans un générateur est interdit pour éviter des bugs silencieux. Utilisez `return` pour terminer le générateur.

Erreurs similaires

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.