pythonbacktrace

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mistermert44
User
Beiträge: 4
Registriert: Montag 7. Februar 2022, 20:45

ich habe ein problem ich versteh nicht was ist falsch gemacht habe könnt ihr mir bitte helfen

Code: Alles auswählen

import pyautogui as p

class Find:
    def __init__(self , image , speed):
        self.image = image
        self.speed = speed
        p.FAILSAFE = True

    def autoaccept (self):
     while True:
            position = p.locateOnScreen(self.image,confidence=.7)
            p.moveTo(position(0)+100,position(1)+25)
            p.singleClick()
            return 1

if __name__ == "__main__":

  find = Find(r'C:\Users\egeme\minecraft_move\leagueautoaccept.png' , speed=.001)
  while True:
        if find.autoaccept() == 1:
           break
Das ist der code und es kommt das als backtrace
Traceback (most recent call last):
File "C:\Users\egeme\minecraft_move\move.py", line 20, in <module>
if find.autoaccept() == 1:
File "C:\Users\egeme\minecraft_move\move.py", line 11, in autoaccept
position = p.locateOnScreen(self.image,confidence=.7)
File "C:\Users\egeme\AppData\Local\Programs\Python\Python310-32\lib\site-packages\pyautogui\__init__.py", line 175, in wrapper
return wrappedFunction(*args, **kwargs)
File "C:\Users\egeme\AppData\Local\Programs\Python\Python310-32\lib\site-packages\pyautogui\__init__.py", line 213, in locateOnScreen
return pyscreeze.locateOnScreen(*args, **kwargs)
File "C:\Users\egeme\AppData\Local\Programs\Python\Python310-32\lib\site-packages\pyscreeze\__init__.py", line 372, in locateOnScreen
screenshotIm = screenshot(region=None) # the locateAll() function must handle cropping to return accurate coordinates, so don't pass a region here.
File "C:\Users\egeme\AppData\Local\Programs\Python\Python310-32\lib\site-packages\pyscreeze\__init__.py", line 144, in wrapper
raise PyScreezeException('The Pillow package is required to use this function.')
pyscreeze.PyScreezeException: The Pillow package is required to use this function.
[Finished in 2.678s]
ich weiß nicht was falsch ist.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Steht doch da. Das Paket Pillow muss vorhanden sein. Musst du also installieren.
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mistermert44: An dem Code ist auch einiges merkwürdig. Die Klasse macht keinen Sinn, das ist doch einfach nur eine Funktion die übermässig kompliziert geschrieben ist. Der Name der Klasse deutet schon darauf hin, das etwas nicht ganz stimmt, denn `Find` beschreibt ja kein ”Ding” im weitesten Sinne sondern eine Tägigkeit, also ein Name der eher für eine Funktion oder Methode gedacht ist.

`speed` wird nirgends verwendet.

ZwischenWorteninNamensolltemaneinenUnterstrichsetzenweilsichdassonstschwererliest.

Eine ``while`` Schleife die grundsätzlich genau *einmal* läuft, weil sie am Ende des Schleifenkörpers mit einem ``return`` beendet wird, ist keine Schleife.

Eine Funktion die grundsätzlich den Wert 1 als Rückgabewert hat, hat eigentlich keinen Rückgabewert, denn das macht keinen Sinn. Auch das prüfen ob es eine 1 war, wenn es immer nur eine 1 sein kann, ist sinnfrei.

Und an der Stelle wo die Prüfung stattfindet die *immer* Wahr ist, haben wir dann noch mal eine Schleife die gar keine ist. Was soll das?

Eingerückt wird vier Leerzeichen pro Ebene.

Womit von dem Code das hier übrig bleibt:

Code: Alles auswählen

#!/usr/bin/env python3
import pyautogui as p


def auto_accept(image):
    position = p.locateOnScreen(image, confidence=0.7)
    p.moveTo(position(0) + 100, position(1) + 25)
    p.singleClick()


if __name__ == "__main__":
    p.FAILSAFE = True
    auto_accept(R"C:\Users\egeme\minecraft_move\leagueautoaccept.png")
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
mistermert44
User
Beiträge: 4
Registriert: Montag 7. Februar 2022, 20:45

kurze frage wie hast du geschaut also wie hast du die fehler gefunden erfahrung oder gehst du eine reiehenfolge beim fehlerfinden weil das ist mein erstes programm und is auto_accept notwendig?
mistermert44
User
Beiträge: 4
Registriert: Montag 7. Februar 2022, 20:45

und noch was auto_accept tut es dann solange wiederholen bis die aufgabe erfüllt wurde oder lauft sie permanent @__blackjack__
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das auto_accept macht das nur einmal. Das ist in deinem Code aber genauso.
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mistermert44: Warum hast Du eine Klasse geschrieben wenn Du offenbar gar nicht weisst was das alles bedeutet? Oder die ``while``-Schleifen die keinen Sinn machen, warum hast Du die geschrieben?

Ob `auto_accept()` nötig ist, musst Du doch wissen, ob die Funktionalität die da drin steht gebraucht wird. Also als eigene Funktion braucht man das in diesem kleinen Programm nicht zwingend. Wird ja nur an einer Stelle aufgerufen und alles ist recht kurz, man könnte den Code der Funktion also auch einfach an die Stelle des Aufrufs schreiben.

Ohne Schleife wird da nichts wiederholt. Eine Frage wäre sicher was `p.locateOnScreen()` liefert wenn das Bild gar nicht auf dem Bildschirm zu finden ist. Und das `position` *aufegerufen* wird, sieht auch komisch aus. Da muss man in der Dokumentation nachlesen wie die Funktionsweise ist und was die Funktion zurück gibt.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten