The ``++else++`` clause of a loop is skipped when a ``++break++`` is executed in this loop. In other words, a loop with an ``++else++`` but no ``++break++`` statement will always execute the ``++else++`` part (unless of course an exception is raised or ``++return++`` is used). If this is what the developer intended, it would be much simpler to have the ``++else++`` statement removed and its body unindented. Thus having a loop with an ``++else++`` and no ``++break++`` is most likely an error. == Noncompliant Code Example ---- from typing import List def search_first_number_without_break(elements: List[str]): for elt in elements: if elt.isnumeric(): return elt else: # Noncompliant. This will be executed every time raise ValueError("List does not contain any number") ---- == Compliant Solution ---- from typing import List def search_first_number_with_break(elements: List[str]): for elt in elements: if elt.isnumeric(): break else: raise ValueError("List does not contain any number") return elt ---- or ---- from typing import List def search_first_number_without_else(elements: List[str]): for elt in elements: if elt.isnumeric(): return elt raise ValueError("List does not contain any number") ---- == See * https://docs.python.org/3/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops[Python documentation - break and continue Statements, and else Clauses on Loops] ifdef::rspecator-view[] == Comments And Links (visible only on this page) include::comments-and-links.adoc[] endif::rspecator-view[]