Python中... else的反义操作是什么

7 投票
4 回答
3872 浏览
提问于 2025-04-16 01:36

下面的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)放在一个函数里,这样就可以做到不要重复自己

撰写回答