Python“;而";循环未按预期结束
我试图在我的代码中使用“Python风格”,我试图依次调用三个函数,第二个函数只有在第一个函数不产生结果时才被调用,第三个函数只有在第一个和第二个函数不产生结果时才被调用Python“;而";循环未按预期结束,python,while-loop,Python,While Loop,我试图在我的代码中使用“Python风格”,我试图依次调用三个函数,第二个函数只有在第一个函数不产生结果时才被调用,第三个函数只有在第一个和第二个函数不产生结果时才被调用 sky = "none" while sky == "none": sky = searchUnguided(inframe, skysearch, debug=debug) sky = searchPQ(ad, skysearch, maxpq, debug=debug) sky = searchAB
sky = "none"
while sky == "none":
sky = searchUnguided(inframe, skysearch, debug=debug)
sky = searchPQ(ad, skysearch, maxpq, debug=debug)
sky = searchAB(ad, maxpq, debug=debug)
break
每个函数searchUnguided
、searchPQ
和searchAB
都返回一个值,默认值为none
,但可以更改为其他值。当sky==“none”循环时,我要停止的就是这些“其他”情况。然而,它并没有像我所期望的那样工作,即使第一个函数返回的不是none
,所有三个函数都会被调用
一个函数的示例(已验证它是否按预期返回非none值):
我是否误解了循环的工作方式?我总是可以使用嵌套的if
语句,但这似乎太冗长了
提前谢谢 如果函数searchUnguided()找到的答案不是none,则它会从自己的局部FOR循环中断。它不会从while循环中中断。当代码运行时,第2行检查sky=='none',如果是,它将继续运行。在第3行,假设天空正在改变,它没有任何检查(记住,检查在第2行)。因此,其余代码在第6行的中断出现之前运行
我可能会这样做:
sky = "none"
while sky == "none":
sky = searchUnguided(inframe, skysearch, debug=debug)
if sky != "none":
break
sky = searchPQ(ad, skysearch, maxpq, debug=debug)
if sky != "none":
break
sky = searchAB(ad, maxpq, debug=debug)
break
sky = searchUnguided(searchUnguided(inframe, skysearch, debug=debug)
if sky == "none":
sky = searchPQ(ad, skysearch, maxpq, debug=debug)
if sky == "none":
sky = searchAB(ad, maxpq, debug=debug)
# you may want another "if" here to do something else if sky is still "none"
也许有更好的答案,但这会奏效。这一行:
而天空==“无”:
仅在每次循环后检查while循环条件。因此,在这种情况下,所有函数都将在下一次检查条件之前执行。但是,由于中断;while循环将无论如何终止。这使得该while循环只是常规if条件的重写版本。在这种情况下,while循环将不起作用,因为它的第一次计算结果将为true,第二次计算结果将由于中断而不存在
看起来ifs是一种不错的方法我认为你对while
循环的理解是不正确的。循环条件只在循环的顶部检查,因此,在调用searchUnguided
之前检查一次,并且不再检查(因为上次调用之后有一个break
语句)。它不会在函数调用之间进行测试
我想你想要的是这样的:
sky = "none"
while sky == "none":
sky = searchUnguided(inframe, skysearch, debug=debug)
if sky != "none":
break
sky = searchPQ(ad, skysearch, maxpq, debug=debug)
if sky != "none":
break
sky = searchAB(ad, maxpq, debug=debug)
break
sky = searchUnguided(searchUnguided(inframe, skysearch, debug=debug)
if sky == "none":
sky = searchPQ(ad, skysearch, maxpq, debug=debug)
if sky == "none":
sky = searchAB(ad, maxpq, debug=debug)
# you may want another "if" here to do something else if sky is still "none"
你知道它会在前三个函数调用后中断吗?不,如果我删除中断
它将永远运行。。。