与Python相反的是。。。其他的

与Python相反的是。。。其他的,python,python-3.x,for-loop,if-statement,Python,Python 3.x,For Loop,If Statement,随着for循环的完成,下面的Python代码将导致n(14)被打印 for n in range(15): if n == 100: break else: print(n) 然而,我想要的是相反的结果。有没有一种方法可以帮你。。。else(或while…else)循环,但仅在循环确实中断时执行else代码?在Python(或我所知的任何语言)中没有明确的类似于…elseifbreak的构造,因为您可以简单地执行以下操作: for n in range(15):

随着
for
循环的完成,下面的Python代码将导致n(14)被打印

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

然而,我想要的是相反的结果。有没有一种方法可以帮你。。。else(或while…else)循环,但仅在循环确实中断时执行else代码?

在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

我不太喜欢到目前为止发布的答案,因为它们都要求更改循环的主体,如果主体非常复杂,这可能会很烦人/有风险,因此这里有一种使用标志的方法。将
\u break
替换为
found
或其他对您的用例有意义的内容

_break = True
for n in range(15):
    if n == 100:
        break
else:
    _break = False

if _break:
    print(n)
另一种可能性是,如果循环未找到匹配项,则函数不执行任何操作,则在
else:
块中返回

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


当然不是op想要的?为什么不?它也有同样的效果。如果您希望在遇到
break
语句时运行代码,那么只需。。。在break语句之前运行代码我还没有见过这样的结构,但是你可以使用*shubders*
goto
关键是OP想要的不是他真正想要的,有更好的方法来做。写解决方案atm太累了(可能以后!),但使用ContextManager可能是一个解决方案!灵感的来源可能在这里:如果
中断发生在最后一次循环迭代中,那么这会给出错误的结果。在这种情况下,它将同时打印“循环成功”和“循环失败”。请不要只发布代码作为答案,还要解释代码的作用以及它如何解决问题。带解释的答案通常更有帮助,质量更好,更容易吸引选票。你好!虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。
for n in range(15):
    if n == 100:
        break
else:
    print("loop successful")
if n != range(15)[-1]:
    print("loop failed")