以下python代码将导致打印n(14),因为for循环已完成。
for n in range(15):
if n == 100:
break
else:
print(n)
但是,我想要的是与此相反。有没有办法做一个for ... else(或while ... else)循环,但只有在循环 中断时才执行else代码?
答案 0 :(得分:16)
在Python(或我所知的任何语言)中没有明确的for...elseifbreak
- 类似的构造,因为你可以简单地这样做:
for n in range(15):
if n == 100:
print(n)
break
如果您有多个break
,请将print(n)
放入函数中,以便Don't Repeat Yourself。
答案 1 :(得分:6)
使用异常的更通用的解决方案,如果您在循环中打破多个点并且不想重复代码:
try:
for n in range(15):
if n == 10:
n = 1200
raise StopIteration()
if n > 4:
n = 1400
raise StopIteration()
except StopIteration:
print n
答案 2 :(得分:4)
我真的不喜欢到目前为止发布的答案,因为它们都需要更改循环体,如果身体真的很复杂可能会很烦人/冒险,所以这里有一种方法可以使用一只旗。将_break
替换为found
或其他对您的用例有意义的内容
_break = True
for n in range(15):
if n == 100:
break
else:
_break = False
if _break:
print(n)
如果循环找不到匹配项,那么它是一个无效的函数的另一种可能性是return
块中的else:
for n in range(15):
if n == 100:
break
else:
return
print(n)
答案 3 :(得分:0)
怎么样:
for n in range(15):
if n == 100:
break
else:
print("loop successful")
if n != range(15)[-1]:
print("loop failed")