2013-07-07 198 views
2

有一個腳本,我在Python 2.6的屏幕上移動光標。它沿着一條直線輕微變化。速度是固定的,目的地也是輕微變化的。Python錯誤信息'沒有錯誤信息可用'使用win32api

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有關,但我正在尋求一些幫助。

+1

爲什麼不在失敗函數週圍放置try/except塊並在失敗時打印參數? –

+0

我對Python比較陌生,不知道如何去做你所要求的。 – nickrogers

回答

0

所以你是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 

的想法是簡單地攔截異常,打印造成它的所有參數,然後讓它傳播像以前一樣(可能終止程序)。希望這會幫助你理解哪些論點會導致錯誤。