Seite 1 von 1

wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 11:09
von StMan
Hallo,
ich habe eine Fehlermeldung, diese kann ich nicht zuordnen.
Kann mich jemand aufklären ?

Code: Alles auswählen

class Application:
     def login(self, host, username, password):
        print(f"Anmeldeversuch für Benutzer:{host} , {username} ,  {password}")  ### der print funktioniert
         try:
            conn = mysql.connector.connect(
            host ,
            username,
            password,
            #database=database
        )
            if conn.is_connected():
                messagebox.showinfo("Ergebnis", "OK: Verbindung erfolgreich hergestellt!")
                conn.close()
            else: 
                messagebox.showerror("Ergebnis", "Fehler: Verbindung konnte nicht hergestellt werden.")
        except Error as e:
            messagebox.showerror("Fehler", f"Verbindungsfehler: {e}")

Code: Alles auswählen

def on_connect(self):
        host = self.host_var.get().strip()
        username = self.user_var.get().strip()
        password = self.password_var.get()
        
        if not host or not username:
            messagebox.showwarning("Fehlende Felder", "Bitte geben Sie Host und Benutzernamen an.")
            return
        try: self.app.login(host, username, password)        
        except Exception as e:
            messagebox.showerror("Login Fehler", str(e))        ###  <- Fehlermeldung von hier:   CMySQLConnection.__init__() takes 1 positional argument but 4 were given

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 11:23
von derHoepp
Moin,

ich vermute mal, dass du den Syntaxfehler meinst, dass du der Connect-Methode ein Komma zu viel übergibst.

Viele Grüße
derHoepp

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 11:33
von sparrow
@StMan: Bitte die komplette Fehlermeldung Posten. Nicht nur eine Zeile davon. Die Fehlermeldung passt nicht zu der Stelle, die du angibst.
Bzw. die Ausgabe kommt an der Stelle, die weil du da aktiv den Fehler suchst. Trotzdem steht in der Fehlermeldung eine Ausgabe, die eigentlich nicht zu deinem Code passen kann. Kann es sein, dass du da nochträglich dran gefummelt hast und die Ausgabe von einem vorherigen Versuch ist?
Der Fehler wird dir sogar in Prosa beschrieben.

Falls du du mysql-connector-python verwendest, würde ich mit dem Beispiel auf der Seite dort beginnen. Dort werden named parameters verwendet.

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 11:49
von Dennis89
@derHoepp da ist kein Syntaxfehler, siehe:

Code: Alles auswählen

def give_it_to_me(a, b):
    print(a, b)

def main():
    give_it_to_me(
        'a',
        'b',
        #c
    )

if __name__ == '__main__':
    main()
Wichtig ist, dass man weiß was Positional Argumments und Keywords Argumments sind.

Grüße
Dennis

@sparrow dein Link geht nicht. Denke du meinst:
https://pypi.org/project/mysql-connector-python/

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 12:24
von StMan
derHoepp hat geschrieben: Samstag 31. Januar 2026, 11:23 Moin,
ich vermute mal, dass du den Syntaxfehler meinst, dass du der Connect-Methode ein Komma zu viel übergibst.
sorry, das Komma kann ich nicht sehen? Vielleicht muß ich zum Augenarzt :ugeek:

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 12:35
von StMan
sparrow hat geschrieben: Samstag 31. Januar 2026, 11:33 @StMan: Bitte die komplette Fehlermeldung Posten. Nicht nur eine Zeile davon. Die Fehlermeldung passt nicht zu der Stelle, die du angibst.
Bzw. die Ausgabe kommt an der Stelle, die weil du da aktiv den Fehler suchst. Trotzdem steht in der Fehlermeldung eine Ausgabe, die eigentlich nicht zu deinem Code passen kann. Kann es sein, dass du da nochträglich dran gefummelt hast und die Ausgabe von einem vorherigen Versuch ist?
Der Fehler wird dir sogar in Prosa beschrieben.

Falls du du mysql-connector-python verwendest, würde ich mit dem Beispiel auf der Seite dort beginnen. Dort werden named parameters verwendet.
Hallo @sparrow das ist die komplette Fehlermeldung aus der messagebox.showerror("Login Fehler", str(e)), in der Console gibt es kein Fehler (und nein, ich habe nicht gefummelt.)

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 13:33
von Sirius3
@StMan: Einrückungen sind in Python wichtig. Bei Dir ist einiges durcheinander. Eingerückt wird immer mit 4 Leerzeichen pro Ebene. Es ist wie den Schlüssel im unaufgeräumten Zimmer zu finden, so ist es auch viel schwieriger, einen Fehler in so uneinheitlichen Code zu finden.

Du hast jetzt die Fehlerausgabe direkt in Application.login, für eine klare Trennung hatte ich aber schon in meinem Beispiel die Ausgabe in der GUI-Klasse.
Für die Fehlersuche ist es dann sinnvoll, den Code ohne GUI zu testen und dort direkt den kompletten Stacktrace auf der Console anzuschauen, statt den Text aus einer Messagebox abtippen zu müssen.

mysql.connector.connect erwartet Keyword-Argumente:

Code: Alles auswählen

mysql.connector.connect(
    host=host,
    user=username,
    password=password,
    database=database,
)

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 13:57
von derHoepp
Dennis89 hat geschrieben: Samstag 31. Januar 2026, 11:49 @derHoepp da ist kein Syntaxfehler, siehe:
Oh, danke für den Hinweis. Beim nächsten Mal antworte ich lieber erst nach dem testen.

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 13:57
von StMan
@ sirius, die Fehlerausgabe ist in def on_connect(self): und nicht in Application.login.
Betr. Einrückungen: ich benutze Visual Studio Code. Das zeigt mir Fehler bei den Enrückungen an (denke ich doch). Diesbezüglich sind keine Fehler erkennbar.

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 14:07
von Sirius3
@StMan: ich kann nur das beurteilen, was Du hier postest, und nicht was Du in irgendeinem Editor hast. Also entweder ist Dein Code kaputt, oder Du hast den Code falsch hier her kopiert.

Das hier der Fehler in on_connect ausgegeben wird, bedeutet ja nicht, dass der auch dort auch herkommt. Deshalb, schrieb ich ja, keine "Fehlerbehandlung" sondern in der Konsole testen, dann sieht man auch, wo der Fehler ist.

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 14:08
von Dennis89
Das mit den Editoren und Fehler bzw. Warnungen ist unter anderem auch Einstellungssache. Grundsätzlich solltest du einfach durchgehend 4 Leerzeichen verwenden.

Na du hast doch in `login` ein `try`/`except` um das `conn = mysql.connector.connect(...)` dass den Fehler wirft und zusätzlich ist in `on_connect` noch ein `try´/`except`.

Ist dir der Fehler eigentlich klar geworden?

Grüße
Dennis

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 14:21
von StMan
nein, der Fehler ist mir nicht klar geworden. Er wird doch von:
def on_connect(self)
except Exception as e:
messagebox.showerror("Login Fehler", str(e))
ausgegeben.

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 17:45
von Dennis89
Wir machen das jetzt anders, poste bitte den vollständigen Code, an einem Stück in einen Code-Block, der dir deinen genannten Fehler ausgibt. Dann gehen wir den durch und schauen und erklären wann wo der Fehler auftritt.

Das mit den Keywords-Argummente von SIrius3 hast du gesehen?

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 17:57
von StMan
ich habe das mit den Keywords_Argumenten jetzt verstanden. Das war auch der Fehler.
Was ich nicht verstehe, ist das der Fehler in def(): on_connect(self,) gemeldet wird, obwohl er in def(): login(self, ) stattfindet.

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 18:04
von Dennis89
Wie gesagt, vollständiger Code und man kann es dir zeigen/erklären. Alternativ wurde auch schon vorgeschlagen, das ganze ohne GUI im Terminal zu machen, damit dir der vollständige Traceback angezeigt wird

Re: wo liegt der Fehler ?

Verfasst: Samstag 31. Januar 2026, 18:29
von __blackjack__
@StMan: In der `login()` wird `Error` und alles was davon abgeleitet wird, behandelt. Wo auch immer `Error` her kommt. Das ist keine der Standard-Ausnahmen von Python. Der `TypeError` der durch den falschen Aufruf ausgelöst wird, ist aber eine Ausnahme aus der Standardbibliothek und ist und kann nicht von dem `Error` abgeleitet sein, also wird der auch nicht in der `login()` behandelt. Aber in der aufrufenden Methode, denn das wird ja allgemein alles was von `Exception` abgeleitet ist, behandelt.

`login()` ist so wie es da steht ja keine Methode, sondern nur eine Funktion die in einer Klasse steckt. Und die macht auch nicht wirklich was der Name nahelegt. Die testet ja eher. Vielleicht sollte die besser wirklich eine Anmeldung machen und die Verbindung zurückgeben, oder wenn es tatsächlich eine Methode sein soll, dann die Verbindung an das Objekt binden. Dann sollte man allerdings auch aufpassen, was passiert wenn die Methode schon mal aufgerufen wurde, und vielleicht nicht einfach so ein schon bestehendes Verbindungsobjekt ersetzen.

Der `is_connected()`-Aufruf ist überflüssig. Man *weiss* an der Stelle ja, dass die Verbindung hergestellt wurde. Falls dem nicht so wäre, hätte es eine Ausnahme gegeben und man käme gar nicht erst zu dem Aufruf.

Dir Programmlogik sollte von der GUI getrennt sein, also in der Logik macht man nichts was irgendwie mit GUI zu tun hat. Also auch keine Dialoge mit Meldungen anzeigen.