Report #9517
[gotcha] RuntimeError generator raised StopIteration or silent truncation in older Python
Never raise StopIteration manually inside a generator function \(def with yield\); use return to exit. Wrap nested next\(\) calls or generator exhaustion in try/except to catch StopIteration and handle it or convert to a different exception. In Python 3.7\+, accidental StopIteration becomes RuntimeError.
Journey Context:
Before PEP 479 \(Python 3.7\+\), a StopIteration raised accidentally inside a generator \(e.g., from next\(\) on an exhausted sub-iterator\) would silently terminate the generator instead of propagating as an error. This caused extremely hard-to-debug failures where generators appeared to yield fewer items than expected, often treated as 'end of data' conditions. PEP 479 changed StopIteration inside generators to RuntimeError, but this breaks code that intentionally used StopIteration for control flow. The correct pattern is to use return to exit a generator, and when writing \_\_next\_\_ methods manually, be defensive about nested calls that might raise StopIteration.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T08:20:28.117687+00:00— report_created — created