如何从被调用函数 "continue" 调用函数中的循环?
How can I "continue" a loop in the calling function, from the called function?
我有以下工作代码:
while True:
try:
pyautogui.click('a.png')
except pyautogui.ImageNotFoundException:
print('a not found')
continue
try:
pyautogui.click('b.png')
except pyautogui.ImageNotFoundException:
print('b not found')
continue
我希望能够这样做:
def a():
try:
pyautogui.click('a.png')
except pyautogui.ImageNotFoundException:
print('a not found')
continue
def b():
try:
pyautogui.click('b.png')
except pyautogui.ImageNotFoundException:
print('b not found')
continue
while True:
a()
b()
当我将 try-except 块放入函数中时,我无法使用“continue”。我希望它 运行 直到我在函数内部单击它试图单击的图像。我该如何解决?
您未能对循环逻辑进行编程。如果我正确地解释了你的描述,你想在点击两个区域之间交替,并保持循环,直到你成功点击其中一个区域。
如果是这样,请再次查看您的代码:是什么原因导致您离开循环?请注意,无法直接从函数内部控制循环逻辑:函数无法知道它是从循环内部调用的。相反,函数 return 的成功状态为:
def a():
try:
pyautogui.click('a.png')
return True
except pyautogui.ImageNotFoundException:
return False
# Do the same with function `b`
found = False
while not found:
found = a() or b()
这最后一行是典型的编程习惯用法,用于按特定顺序尝试事物。这取决于布尔短路逻辑。 运行-时间系统会调用a()
;它返回 True
,然后它知道整个表达式将是 True
,并且不会调用 b()
。如果对 a
的调用返回 False
,那么解释器只会调用 b()
,将 return 值分配给 found
。
事实上,您可以将循环减少到
while not a() and not b():
pass
OP 差异后的响应
如果您需要的只是重复点击每张图片,直到找到每张图片,那么您的循环逻辑与您的需要不匹配。这样问题就简单多了:
while not a():
pass
while not b():
pass
我有以下工作代码:
while True:
try:
pyautogui.click('a.png')
except pyautogui.ImageNotFoundException:
print('a not found')
continue
try:
pyautogui.click('b.png')
except pyautogui.ImageNotFoundException:
print('b not found')
continue
我希望能够这样做:
def a():
try:
pyautogui.click('a.png')
except pyautogui.ImageNotFoundException:
print('a not found')
continue
def b():
try:
pyautogui.click('b.png')
except pyautogui.ImageNotFoundException:
print('b not found')
continue
while True:
a()
b()
当我将 try-except 块放入函数中时,我无法使用“continue”。我希望它 运行 直到我在函数内部单击它试图单击的图像。我该如何解决?
您未能对循环逻辑进行编程。如果我正确地解释了你的描述,你想在点击两个区域之间交替,并保持循环,直到你成功点击其中一个区域。
如果是这样,请再次查看您的代码:是什么原因导致您离开循环?请注意,无法直接从函数内部控制循环逻辑:函数无法知道它是从循环内部调用的。相反,函数 return 的成功状态为:
def a():
try:
pyautogui.click('a.png')
return True
except pyautogui.ImageNotFoundException:
return False
# Do the same with function `b`
found = False
while not found:
found = a() or b()
这最后一行是典型的编程习惯用法,用于按特定顺序尝试事物。这取决于布尔短路逻辑。 运行-时间系统会调用a()
;它返回 True
,然后它知道整个表达式将是 True
,并且不会调用 b()
。如果对 a
的调用返回 False
,那么解释器只会调用 b()
,将 return 值分配给 found
。
事实上,您可以将循环减少到
while not a() and not b():
pass
OP 差异后的响应
如果您需要的只是重复点击每张图片,直到找到每张图片,那么您的循环逻辑与您的需要不匹配。这样问题就简单多了:
while not a():
pass
while not b():
pass