与Python相反的......其他

时间:2010-07-21 03:16:56

标签: python python-3.x for-loop if-statement

以下python代码将导致打印n(14),因为for循环已完成。

for n in range(15):
    if n == 100:
        break
else:
    print(n)

但是,我想要的是与此相反。有没有办法做一个for ... else(或while ... else)循环,但只有在循环 中断时才执行else代码?

4 个答案:

答案 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")