You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在time.sleep()期间捕获pyautogui.FailSafeException异常?

解决休眠期间实时捕获pyautogui安全异常的方案

问题核心在于time.sleep(10)会让程序完全阻塞,这段时间内无法执行任何检查逻辑,导致鼠标移到左上角后要等休眠结束才触发异常。要实现实时捕获,需要把长休眠拆分成多次短休眠,每次休眠后主动触发安全检查。

具体实现代码

import time
import pyautogui

try:
    while True:
        for coords in [(100, 100), (1000, 100), (1000, 1000), (100, 1000)]:
            pyautogui.moveTo(coords)
            # 替换原有的time.sleep(10),实现带安全检查的休眠
            total_sleep_time = 10
            check_interval = 0.1  # 每0.1秒检查一次
            elapsed_time = 0
            
            while elapsed_time < total_sleep_time:
                # 主动触发pyautogui的安全检查
                pyautogui.failSafeCheck()
                time.sleep(check_interval)
                elapsed_time += check_interval
except pyautogui.FailSafeException:
    # 这里写触发安全机制后的操作
    print("安全机制触发,程序停止")

原理说明

  1. 拆分长休眠:把10秒的连续休眠拆成多个0.1秒的短休眠,避免程序长时间阻塞。
  2. 主动安全检查:每次短休眠后调用pyautogui.failSafeCheck(),这个函数会直接检查鼠标是否处于屏幕左上角(0,0),如果是立即抛出FailSafeException,无需等到休眠结束。
  3. 兼顾精度与性能:0.1秒的间隔既能保证异常触发的及时性,又不会因为过于频繁的检查占用过多系统资源,你也可以根据需求调整这个间隔值。

替代方案(手动检查)

如果不想依赖pyautogui的内置检查函数,也可以手动获取鼠标位置并判断:

# 替换循环内的检查逻辑
while elapsed_time < total_sleep_time:
    current_pos = pyautogui.position()
    if current_pos == (0, 0):
        raise pyautogui.FailSafeException()
    time.sleep(check_interval)
    elapsed_time += check_interval

不过更推荐使用failSafeCheck(),因为它会处理pyautogui安全机制的所有细节(比如部分系统的特殊安全位置),兼容性更好。

内容的提问来源于stack exchange,提问作者vshis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 06:50:54