这是一个有点令人困惑的问题,但这是我的(简化的)代码。
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 语句?
答案 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