python 在程序等待执行下一行代码时捕获pyautogui.FailSafeException

ttcibm8c  于 2022-12-25  发布在  Python
关注(0)|答案(1)|浏览(138)

我在无限while循环中使用pyautogui,每10秒在屏幕上迭代移动鼠标。pyautogui实现了一个故障保护机制,如果鼠标位于屏幕左上角(0,0)坐标,则抛出pyautogui.FailSafeException
我使用time.sleep()和以下代码实现了这个简单的逻辑:

import time 

try:
    while True:
        for coords in [(100, 100), (1000, 100), (1000, 1000), (100, 1000)]:
            pyautogui.moveTo(coords)
            time.sleep(10)  # <- I want to be catching exceptions during this time period as well as when the code is actively running 
except pyautogui.FailSafeException:
    # DO SOMETHING

但是,如果我在10秒睡眠期间将鼠标移动到左上角,则直到10秒睡眠结束时才会捕获异常(很明显!)。我的目标是立即捕获此异常,而不是等到这10秒结束。
所以我的问题是--有没有一个函数可以让我在代码“什么都不做”的10秒内捕捉异常?

c9qzyr3d

c9qzyr3d1#

你可以轮询来检查时间是否已经到期,而不是使用阻塞睡眠命令。轮询时,你可以检查鼠标的位置。如果鼠标的位置是(0,0),你就可以立即爆发。
下面是代码:

代码:

import time 
import pyautogui

def sleep_for(secs):
    current_time = time.time()
    end_time = time.time() + secs
    
    while current_time < end_time:
        current_time = time.time()
        if pyautogui.position() == (0,0):
            print("Fail Safe Exit")
            break
     
try:
    while True:
        for coords in [(100, 100), (1000, 100), (1000, 1000), (100, 1000)]:
            pyautogui.moveTo(coords)
            sleep_for(10) 
                
             
except pyautogui.FailSafeException:
    # DO SOMETHING
    pass

sleep_for()函数用于在等待10秒时监视鼠标位置。如果鼠标移动到(0,0)位置,则它将立即跳出while循环。

相关问题