Python - 在 if 语句中的 for 循环中跳出 if 语句

时间:2021-01-20 16:23:28

标签: python

这是一个有点令人困惑的问题,但这是我的(简化的)代码。

if (r.status_code == 410):
     s_list = ['String A', 'String B', 'String C']
     for x in in s_list:
         if (some condition):
             print(x)
             break

     print('Not Found')

问题是,如果 some condition 得到满足(即 x 被打印),我不希望打印“未找到”。如何跳出最外层的 if 语句?

3 个答案:

答案 0 :(得分:5)

你不能脱离 if 语句;但是,您可以使用 else 循环的 for 子句有条件地执行 print 调用。

if (r.status_code == 410):
     s_list = ['String A', 'String B', 'String C']
     for x in in s_list:
         if (some condition):
             print(x)
             break
     else:
         print('Not Found')

print 仅在 for 循环在迭代 StopIteration 时被 s_list 异常终止时才会被调用,不会break 语句终止。

答案 1 :(得分:2)

为什么不直接使用变量?

if (r.status_code == 410):
     s_list = ['String A', 'String B', 'String C']
     found = None
     for x in in s_list:
         if (some condition):
             found = x
             print(x)
             break

     if not found:
         print('Not Found')

答案 2 :(得分:0)

实际上,语言中有一个通用的机制可以打破任何块,你抛出一个嘶嘶声,也就是异常;只要确保你抓住它并恢复你的流动。 这完全取决于您所处的环境(编码标准、性能等)。

在某些语言中,它不像 LABELS & JUMP/GO_TO 那样干净,但确实有效,我不介意。

from builtins import Exception

class JumpingAround(Exception):
    def __init__(self, message=None, data=None, *args, **kwargs):
        super(Exception, self).__init__(message, *args, **kwargs)
        self.data = data

try: #surrounding the IF/BLOCK you want to jump out of
    if (r.status_code == 410):
        s_list = ['String A', 'String B', 'String C']
        for x in s_list:
            if (some condition):
                print(x)
                # break
                raise JumpingAround() # a more complex use case could raise JumpingAround(data=x) when catching in other functions 
        print('Not Found')
except JumpingAround as boing:
  pass