Wundersamer Aufruf von Modulen
-
Hallo allerseitz,
ich hätte da gerne ein Problem.
In meine Programm(ausschnitt):tmp = self.arbzei[2] # Datum if self.DEBUG: print(f'tmp: {tmp}') print(f'{tmp[:4]} {tmp[5:7]} {tmp[8:]}') j = int(tmp[:4]); m = int(tmp[5:7]); t = int(tmp[8:]) m = m print(f'j: {j}, m: {m}, t: {t}') try: self.ui.arbzeiDEDatum.setDate(QDate(j, m, t)) except Exception as e: print('Exception: ', e) von = self.arbzei[3]; von = von.replace(' ', '0'); von = '0' + von von = von[von.find(':')-2:] if self.DEBUG: print(f'von: {von}') print(f'{von[:2]} {von[3:5]} {von[6:]}') self.ui.arbzeiTEAnfang.setTime(QTime(int(von[:2]), int(von[3:5]), 0))
wobei self.ui.arbzeiDEDatum ein QDateEdit ist. Wenn das Läuft kommt das heraus
jhr: 2023 tmp: 2023-01-20 2023 01 20 j: 2023, m: 1, t: 20 ArbZeiPfl DatumVerarb(self: <__main__.ArbZeiPfl(0x12f2fa2f500, name="ArbPflDialog") at 0x0000012F300C3740>)datum=None: PySide6.QtCore.QDate(2023, 1, 20) abr_DB ZeitraumViaDatum(self: <Abr_DB.abr_DB object at 0x0000012F32654A90>, datum: PySide6.QtCore.QDate(2023, 1, 20)) abr_DB db_connect(self, user, password, host, database) <- Traceback (most recent call last): File "F:\Python\DRK-OV-SueWo\ArbeitsZeitPflegen.py", line 306, in DatumVerarb self.arbrec = self.abrdb.ZeitraumViaDatum(tmp) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "F:\Python\DRK-OV-SueWo\Abr_DB.py", line 500, in ZeitraumViaDatum sql += ' WHERE `von` <= "' + datum + '" AND `bis` >= "' ~~~~~~~~~~~~~~~~~~~~^~~~~~~ TypeError: can only concatenate str (not "PySide6.QtCore.QDate") to str von: 09:00:00 09 00 00
Ich habe keine Ahnung was da abgeht.
Die Auffrufe DatumVerarb() und ZeitraumViaDatum() werden eigentlich im laufenden Modul am Anfang aufgerufen. db_connect ist ein Aufruf im Modul in ZeitraumViaDatum.
Die Fehlermeldungen unter den Aufrufen sind nicht relevant.
Mir geht es nur darum, das die aufgerufen werden.Selbst der in Einschluß in einem try/connect Block brachte keine Erkentnisse.
Hat jemand so etwas schon mal gesehen oder dafür eine Erklärung?
Gruß
Karl-Heinz -
@kahemenne said in Wundersamer Aufruf von Modulen:
ArbZeiPfl DatumVerarb(self: <main.ArbZeiPfl(0x12f2fa2f500, name="ArbPflDialog") at 0x0000012F300C3740>)datum=None: PySide6.QtCore.QDate(2023, 1, 20)
datum
istNone
?^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "F:\Python\DRK-OV-SueWo\Abr_DB.py", line 500, in ZeitraumViaDatum sql += ' WHERE `von` <= "' + datum + '" AND `bis` >= "' ~~~~~~~~~~~~~~~~~~~~^~~~~~~ TypeError: can only concatenate str (not "PySide6.QtCore.QDate") to str
datum
muesst vielleichtstr(datum)
oderdatum.toString(...)
sein? Oder vielleicht ein Python nicht ein Qt date-type sein, dass weiss ich nicht. -
@kahemenne said in Wundersamer Aufruf von Modulen:
Ich habe keine Ahnung was da abgeht.
Das ist meist schlecht :)
Die Fehlermeldungen unter den Aufrufen sind nicht relevant.
Doch sind sie. Immer. Fehlermeldungen und Abstürze können und sollten nicht ignoriert werden. Das Programm läuft ja auch sonst nicht.
An den Fehlermeldungen erkennt man was ungefähr das Problem ist oder kann es eingrenzen.Mir geht es nur darum, das die aufgerufen werden.
Funktionen aufzurufen, wo man weiß, dass sie nicht 100% funktionieren bzw. erst halb implementiert sind, führt unweigerlich zum Crash...
Zum eigentlichen Problem:
Der Code-Ausschnitt oben zeigt nicht alle relevanten Stellen.
Da wir den Rest der Module und des Codes nicht kennen, kann man auch nur (anhand der Fehlermeldung) spekulieren, was passiert.self.ui.arbzeiTEAnfang.setTime(QTime(int(von[:2]), int(von[3:5]), 0))
wobei self.ui.arbzeiDEDatum ein QDateEdit ist
Ist
arbzeiTEAnfang
auch einQDateEdit
?Funktioniert das noch? Denn der eigentliche Crash kommt ja in
abr_DB db_connect
ausAbr_DB.py
.Dort versuchst du die SQLQuery zusammenzusetzen und einen Python string (
str
) mit einemdatum
(vom TypPySide6.QtCore.QDate
) zu verknüpfen, was nicht funktioniert, ohne das Datum als String zu interpretieren.
Steht ja auch so in der Fehlermeldung.Hier in der Dokumentation steht wie es geht:
(Ist @JonB oben ja auch schon drauf eingegangen)- https://doc.qt.io/qtforpython/PySide6/QtCore/QDate.html#PySide6.QtCore.PySide6.QtCore.QDate.toString
Bevor irgendwas in eine Datenbank eingetragen wird, könnte man ggfs. noch prüfen (wenn auch nur zu Debug-Zwecken), ob alle
QDate
,QTime
usw. valide sind und sie korrekt ge-"parsed" worden sind.Zum "Wundersamen Aufruf von Modulen":
ArbZeiPfl DatumVerarb(self: <__main__.ArbZeiPfl(0x12f2fa2f500, name="ArbPflDialog") at 0x0000012F300C3740>)datum=None: PySide6.QtCore.QDate(2023, 1, 20) abr_DB ZeitraumViaDatum(self: <Abr_DB.abr_DB object at 0x0000012F32654A90>, datum: PySide6.QtCore.QDate(2023, 1, 20))
Das scheinen
print
Ausgaben von Objekten zu sein, die irgendwo noch im Code stehen.
Oder was genau erscheint dir an all dem so "wundersam"? -
Hallo @Pl45m4,
es geht nicht darum das diese Aufrufe schief gehen.
es geht darum das ich ein QDateEDIT.setDate aufrufe aber etwas ganz anderes wird aufgerufen. Wenn ich das setDate auskomentiere funktioniert alles andere so wie es soll.
Ich verstehe nicht wie diese Aufrufe zustande kommen?
Gruß
Karl-Heinz -
@kahemenne said in Wundersamer Aufruf von Modulen:
es geht darum das ich ein QDateEDIT.setDate aufrufe aber etwas ganz anderes wird aufgerufen
Um welchen "Aufruf" geht es denn?
setDate
macht auch nichts anderes als "setDate". Also daran kann es nicht liegen. Dann sind es Teile vom Code, die hier nicht zu sehen sind. -
Hallo allerseitz,
ich bitte um Entschuldigung für meine Aufregung.
Ich hatte eine Aufruf beim Signal Datum changed übersehen.
Also alles zurück.
Wer lesen kann ist klar im Vorteil.
Bevor man sich über etwas wundert, erst mal alles kontrolieren.Gruß
Karl-Heinz