Python中... else的反义操作是什么
下面的Python代码会打印出n(14),因为这个for
循环已经完成了。
for n in range(15):
if n == 100:
break
else:
print(n)
不过,我想要的是相反的效果。有没有办法让for ... else(或者while ... else)循环,只在循环确实中断的时候执行else部分的代码呢?
4 个回答
4
我不太喜欢之前的回答,因为它们都需要修改循环的主体,这样做可能会很麻烦或者有风险,特别是当循环的内容很复杂的时候。所以这里有一种使用标志的方法来解决这个问题。你可以把 _break
替换成 found
或者其他对你的情况有意义的名字。
_break = True
for n in range(15):
if n == 100:
break
else:
_break = False
if _break:
print(n)
还有一种可能性,如果这个函数在循环没有找到匹配项时什么都不做的话,可以在 else:
块中使用 return
:
for n in range(15):
if n == 100:
break
else:
return
print(n)
7
这里有一个更通用的解决方案,使用了异常处理。这种方法适合你在循环中有多个地方可能出错,而不想重复写代码的情况:
try:
for n in range(15):
if n == 10:
n = 1200
raise StopIteration()
if n > 4:
n = 1400
raise StopIteration()
except StopIteration:
print n
17
在Python中,没有像for...elseifbreak
这样的明确结构(我知道的任何语言中都没有),因为你可以简单地这样做:
for n in range(15):
if n == 100:
print(n)
break
如果你有多个break
,可以把print(n)
放在一个函数里,这样就可以做到不要重复自己。