.. _stop-iteration-return:
stop-iteration-return / R1708
=============================
**Message emitted:**
``Do not raise StopIteration in generator, use return statement instead``
**Description:**
*According to PEP479, the raise of StopIteration to end the loop of a generator may lead to hard to find bugs. This PEP specify that raise StopIteration has to be replaced by a simple return statement*
**Problematic code:**
``fruit_generator.py``:
.. literalinclude:: /data/messages/s/stop-iteration-return/bad/fruit_generator.py
:language: python
``two_fruit_generator.py``:
.. literalinclude:: /data/messages/s/stop-iteration-return/bad/two_fruit_generator.py
:language: python
``two_good_fruit_generator.py``:
.. literalinclude:: /data/messages/s/stop-iteration-return/bad/two_good_fruit_generator.py
:language: python
**Correct code:**
``fruit_generator.py``:
.. literalinclude:: /data/messages/s/stop-iteration-return/good/fruit_generator.py
:language: python
``two_fruit_generator.py``:
.. literalinclude:: /data/messages/s/stop-iteration-return/good/two_fruit_generator.py
:language: python
``two_good_fruit_generator.py``:
.. literalinclude:: /data/messages/s/stop-iteration-return/good/two_good_fruit_generator.py
:language: python
**Additional details:**
It's possible to give a default value to ``next`` or catch the ``StopIteration``,
or return directly. A ``StopIteration`` cannot be propagated from a generator.
**Related links:**
- `PEP 479 `_
Created by the `refactoring `__ checker.