Lingua-e
Python

¿Qué significa StopIteration?

← Errores

StopIteration es lanzado por el método __next__() de un iterador para indicar que no hay más elementos que producir. Es la señal de terminación normal para los iteradores y es capturada automáticamente por los bucles for, pero se propagará como error si llamas a next() manualmente sin un valor por defecto.

Por qué ocurre

  • Llamar a next() sobre un iterador que ya fue completamente consumido.
  • Usar next() dentro de una función generadora, lo que hace que el propio generador se detenga.
  • Iterar manualmente con next() en lugar de usar un bucle for, sin proporcionar un valor por defecto.
  • Consumir un generador o iterador en un lugar e intentar iterarlo de nuevo (los iteradores no se pueden rebobinar).

Ejemplos

Python

Código que causa el error

numbers = iter([1, 2, 3])

print(next(numbers))  # 1
print(next(numbers))  # 2
print(next(numbers))  # 3
print(next(numbers))  # iterator is exhausted

Error en la terminal

1
2
3
Traceback (most recent call last):
  File "app.py", line 6, in <module>
    print(next(numbers))
StopIteration

Cómo solucionarlo

Pasa un valor por defecto como segundo argumento a next(): next(it, None). Usa bucles for en lugar de llamadas manuales a next() para iteraciones simples. Si necesitas iterar un iterador varias veces, conviértelo primero a lista con list(iterador).

Código corregido

numbers = iter([1, 2, 3])

# Use a default value to avoid the exception
value = next(numbers, None)
while value is not None:
    print(value)
    value = next(numbers, None)

# Or simply iterate with a for loop:
for n in [1, 2, 3]:
    print(n)

Errores relacionados

¿Listo para practicar tu inglés en el trabajo?

Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.

Prueba Lingua-e gratis