跳出嵌套循环

新手上路,请多包涵

有没有比抛出异常更容易跳出嵌套循环的方法? (在 Perl 中,您可以为每个循环指定标签,并至少继续一个外循环。)

 for x in range(10):
    for y in range(10):
        print x*y
        if x*y > 50:
            "break both loops"

即,有没有比以下更好的方法:

 class BreakIt(Exception): pass

try:
    for x in range(10):
        for y in range(10):
            print x*y
            if x*y > 50:
                raise BreakIt
except BreakIt:
    pass

原文由 Michael Kuhn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 244
2 个回答

至少被建议过,但也 被拒绝 过。除了重复测试或重新组织代码之外,我认为没有其他方法。有时有点烦人。

拒绝邮件 中,van Rossum 先生提到使用 return ,这非常明智,我需要记住这一点。 :)

原文由 unwind 发布,翻译遵循 CC BY-SA 2.5 许可协议

for x in xrange(10):
    for y in xrange(10):
        print x*y
        if x*y > 50:
            break
    else:
        continue  # only executed if the inner loop did NOT break
    break  # only executed if the inner loop DID break

这同样适用于更深的循环:

 for x in xrange(10):
    for y in xrange(10):
        for z in xrange(10):
            print x,y,z
            if x*y*z == 30:
                break
        else:
            continue
        break
    else:
        continue
    break

原文由 Markus Jarderot 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题