В Python циклы for и while могут содержать блок else, который выполнится, только если цикл завершится без применения break.
Рассмотрим это на примере функции, ищущей иголку (needle) в стоге сена (haystack).
def contains(haystack, needle):
"""
Выбрасывает ValueError, если `needle` нет в `haystack`.
"""
for item in haystack:
if item == needle:
break
else:
# Блок `else` здесь запускается, только если
# цикл доходит до конца без участия оператора `break`.
raise ValueError('Needle not found')
>>> contains([23, 'needle', 0xbadc0ffee], 'needle')
None
>>> contains([23, 42, 0xbadc0ffee], 'needle')
ValueError: "Needle not found"
