Следующий код Python приведет к n (14) распечатанный, поскольку для цикла завершается.
for n in range(15):
if n == 100:
break
else:
print(n)
Однако то, что я хочу, является противоположностью этого. Там какой-либо путь еще еще состоит в том, чтобы сделать для... (или в то время как...) цикл, но только еще выполнитесь код, если цикл действительно повреждался?
В Python нет явной для ... elseifbreak
-подобной конструкции (или на любом языке, который я знаю), потому что вы можете просто сделать это:
for n in range(15):
if n == 100:
print(n)
break
Если у вас есть несколько break
s, поместите print (n)
в функцию, чтобы вы Не повторяйся .
Немного более общее решение с использованием исключений на случай, если вы нарушите несколько точек цикла и не хотите дублировать код:
try:
for n in range(15):
if n == 10:
n = 1200
raise StopIteration()
if n > 4:
n = 1400
raise StopIteration()
except StopIteration:
print n
Мне не очень понравились опубликованные ответы, так как все они требуют изменения тела цикла, что может раздражать / рискованно, если тело действительно сложное, поэтому вот способ сделать это, используя флаг. замените _break
на found
или что-то другое, имеющее значение для вашего варианта использования
_break = True
for n in range(15):
if n == 100:
break
else:
_break = False
if _break:
print(n)
Другая возможность, если это функция, которая ничего не делает, если цикл не находит совпадения, - это return
в else:
block
for n in range(15):
if n == 100:
break
else:
return
print(n)