【问题标题】:Python error message 'No error message is available' using win32api使用 win32api 的 Python 错误消息“没有可用的错误消息”
【发布时间】:2013-07-07 04:09:00
【问题描述】:

在 Python 2.6 中,我编写了一个脚本来在屏幕上移动光标。它沿着一条直线移动,有轻微的变化。速度是固定的,目的地也略有变化。

import win32api, random, math

def cmouse(x2,y2):
    x1,y1 = win32api.GetCursorPos()
    x2 = x2 + random.randrange(-1, 2)
    y2 = y2 + random.randrange(-1, 2)
    dis_x = x2-x1
    dis_y = y2-y1
    dis = math.sqrt(math.pow(x2-x1, 2)+math.pow(y2-y1, 2))
    n = int((dis/2200)*100)
    for i in range(0, n+1):
        t = (random.randrange(1, 3)*0.005)
        c1,d1 = win32api.GetCursorPos()
        if c1 in range(x2-45, x2+46) and d1 in range(y2-45, y2+46):
            var_x = 0
            var_y = 0
        else:
            var_x = random.randrange(-3, 4)
            var_y = random.randrange(-3, 4)
        if n!=0:
            win32api.SetCursorPos((int(x1 + var_x + i*(float(dis_x)/n)),
                                   int(y1 + var_y + i*(float(dis_y)/n))))
            time.sleep(t)
        else:
            time.sleep(t)
            break

它在 99.5% 的情况下都能正常工作,但有时我会收到此错误。

File "C:\User\Desktop\Script.py", line 58, in cmouse
    win32api.SetCursorPos((int(x1 + var_x + i*(float(dis_x)/n)),
                           int(y1 + var_y + i*(float(dis_y)/n))))
error: (0, 'SetCursorPos', 'No error message is available')

我找不到任何方法来解决这个罕见但令人讨厌的错误。我很确定这与 win32api 有关,但我正在寻求帮助。

【问题讨论】:

  • 为什么不在失败的函数周围放置一个 try/except 块并在失败时打印参数?
  • 我对 Python 比较陌生,不知道该怎么做。

标签: python winapi


【解决方案1】:

所以你是 Python 的新手——正如我在评论中建议的那样,你需要弄清楚在调用函数时哪些值会导致错误。试试这个:

try:
    win32api.SetCursorPos((int(x1 + var_x + i*(float(dis_x)/n)),
                           int(y1 + var_y + i*(float(dis_y)/n))))
except:
    print "error in SetCursorPos() with x1", x1, "y1", y1, "var_x", var_x, "var_y", var_y, "dis_x", dis_x, "dis_y", dis_y, "n", n
    raise

这个想法是短暂地拦截异常,打印所有导致它的参数,然后让它像以前一样传播(可能终止程序)。希望这将帮助您了解哪些参数会导致错误。

【讨论】:

    猜你喜欢
    • 2013-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 2013-06-22
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    相关资源
    最近更新 更多