2016-06-07 23 views
0

Ich habe andere Fragen wie (Python 'if x is None' not catching NoneType) überprüft und ich fand nicht, dass die Information für mein Szenario verwendbar war.Python3 "Wenn" nicht das fängt, was es überprüft

import pyautogui 

########################## 
#This is a looping routine to search for the current image and return its coordinates 
########################## 

def finder(passedImage, workSpace): #start the finder func 
    print (passedImage) #print the image to be found 
    currentImage = pyautogui.locateOnScreen(passedImage,region=(workSpace), grayscale=True) #search for the image on the screen 
    if currentImage == None: # if that initial search goes "none" ... 
     print ("Looking") #Let us know we are looking 
     finder(passedImage,workSpace) #go and do the function again 
    print(currentImage) #print out the coordinates 
    currentImageX, currentImageY = pyautogui.center(currentImage) #get the X and Y coord 
    pyautogui.click(currentImageX, currentImageY) #use the X and Y coords for where to click 
    print(currentImageX, currentImageY) #print the X and Y coords 

Die Idee ist einfach für das Skript. Es ist nur, um die Koordinaten eines Bildes zu finden und dann klicken Sie darauf mit der pyautogui Bibliothek (Modul? Neue Terminologie für mich)

Es funktioniert alles außer für die "if currentImage == None:" -Bit.

Es fängt manchmal auf, wenn currentImage Kein ist, und führt dann die Funktion ordnungsgemäß erneut aus, um es zu erhalten, aber andere Male nicht. Ich kann keinen Reim oder Grund dahinter manchmal arbeiten und andere Zeiten nicht finden.

Vorschläge, wie ich für None überprüfen kann und dann dort reagieren Keine große :)

Ein Beispiel Fehler, der Wurf wäre zu sein, ist das Folgende: geschieht

Traceback (most recent call last): 
File "fsr_main_001.py", line 57, in <module> 
newItem() 
File "fsr_main_001.py", line 14, in newItem 
finder.finder(passedImage,workSpace) 
File "/home/tvorac/python/formAutomation/finder.py", line 14, in finder 
currentImageX, currentImageY = pyautogui.center(currentImage) #get the X and Y coord 
File "/usr/local/lib/python3.5/dist-packages/pyscreeze/__init__.py", line 398, in center 
return (coords[0] + int(coords[2]/2), coords[1] + int(coords[3]/2)) 
TypeError: 'NoneType' object is not subscriptable 
+0

den Finder aufrufen wieder rekursiv nichts an der Tatsache ändern, dass currentImage None ist, wenn die Rekursion zurückkehrt. –

Antwort

1

Ich denke, was Wenn Sie sagen, dass Sie die Funktion erneut ausführen, tun Sie das rekursiv. Es gibt keine return nach dem neuen Anruf finder:

if currentImage == None: # if that initial search goes "none" ... 
    print ("Looking") #Let us know we are looking 
    finder(passedImage,workSpace) #go and do the function again 
print(currentImage) #print out the coordinates 

Sobald das finder() Anruf seiner Sache gemacht hat, kehrt die Steuerung zum Beispiel der Funktion, wo currentImage war None, und es trägt auf dem Druck, pyautogui.center und so auf.

Vorausgesetzt, dass dies in einer ziemlich tiefen Rekursion enden kann, ist es wahrscheinlich nicht die beste Methode, um das Bild zu finden. Stattdessen wäre eine Art Schleife am besten.

currentImage = None 
while currentImage is None: 
    currentImage = pyautogui.locateOnScreen(passedImage,region=(workSpace), grayscale=True) #search for the image on the screen 

(oder etwas ähnliches, mit Zusatz von Timeouts, maximale Anzahl der Versuche, usw.)