Python嵌套循环中满足条件时跳过后续同级循环的实现
解决Python嵌套循环跳过后续同级代码的问题
原代码问题
原代码如下:
main_keyword = ["11111", "22222", "333333", "44444", "55555"] for pro in main_keyword: # 1 for i in range(3): if pro == '333333': print(pro, "failure") break else: print(pro, "Pass") pass # 2 for a in range(3): print(a)
当前执行时,当pro等于'333333',break只能跳出内层循环#1,同级的循环#2还是会执行输出0、1、2。我们需要的是:输出failure后直接进入外层循环的下一次迭代,跳过循环#1剩余部分和循环#2。
解决方法
方法一:用标志变量控制
设置一个布尔变量标记是否需要跳过后续代码,在外层循环里判断后执行continue:
main_keyword = ["11111", "22222", "333333", "44444", "55555"] for pro in main_keyword: skip_rest = False # 1 for i in range(3): if pro == '333333': print(pro, "failure") skip_rest = True break else: print(pro, "Pass") # 如果标记为跳过,直接进入下一次外层循环 if skip_rest: continue # 2 for a in range(3): print(a)
方法二:封装为函数用return退出
把外层循环内的逻辑打包成函数,触发条件时直接return,后续代码自然不会执行:
main_keyword = ["11111", "22222", "333333", "44444", "55555"] def process_pro(pro): # 1 for i in range(3): if pro == '333333': print(pro, "failure") return else: print(pro, "Pass") # 2 for a in range(3): print(a) for pro in main_keyword: process_pro(pro)
方法三:异常捕获(不推荐)
用自定义异常跳出逻辑,但这种方式违背了异常的设计初衷,仅作思路参考:
main_keyword = ["11111", "22222", "333333", "44444", "55555"] class SkipProException(Exception): pass for pro in main_keyword: try: # 1 for i in range(3): if pro == '333333': print(pro, "failure") raise SkipProException else: print(pro, "Pass") # 2 for a in range(3): print(a) except SkipProException: continue
推荐方案
方法一和方法二都是符合Python规范的常规写法:方法一适合逻辑简单的场景,代码改动小;方法二在逻辑复杂时更易维护,代码结构更清晰。
内容的提问来源于stack exchange,提问作者anfwkdrn
相关产品推荐
相关产品推荐

