Fehler in Pmw mit Python 2.5 [gelöst]

Fragen zu Tkinter.
Antworten
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Hallo,

ich schreibe gerade ein Programm und bekomme immer die gleiche Fehlermeldung. Dabei ist es egal, welchen Fehler ich habe. Das macht die Fehlerbehebung nicht gerade einfach. Das nervt einfach.

Folgende Meldung bekomme ich:

Code: Alles auswählen

Traceback (most recent call last):
  File "./atzek.py", line 1203, in <module>
    Atzek()
  File "./atzek.py", line 92, in __init__
    self.root.mainloop()
  File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1023, in mainloop
    self.tk.mainloop(n)
  File "/usr/lib/python2.5/Pmw/Pmw_1_2/lib/PmwBase.py", line 1751, in __call__
    _reporterror(self.func, args)
  File "/usr/lib/python2.5/Pmw/Pmw_1_2/lib/PmwBase.py", line 1777, in _reporterror
    msg = exc_type + ' Exception in Tk callback\n'
TypeError: unsupported operand type(s) for +: 'type' and 'str'
Die Fehlermeldung kommt auch, wenn ich eine Variable nicht übergebe oder falsch bezeichne. Mein OS ist openSUSE 10.2.

Hat jemand eine Idee, wie ich eine vernünftige Fehlerausgabe bekomme?
Kann es sein, das Pmw mit meinen Fehlern nicht umgehen kann ? :D

Stephan
Zuletzt geändert von Mawilo am Sonntag 31. Dezember 2006, 14:33, insgesamt 1-mal geändert.
lunar

Stephan hat geschrieben:ich schreibe gerade ein Programm und bekomme immer die gleiche Fehlermeldung. Dabei ist es egal, welchen Fehler ich habe.
Huh? Was meinst du den damit? Du hast immer die gleiche Fehlermeldung, bei der aber immer was anderes drinnen steht, oder wie?
Stephan hat geschrieben:Das macht die Fehlerbehebung nicht gerade einfach. Das nervt einfach.

Folgende Meldung bekomme ich:

Code: Alles auswählen

Traceback (most recent call last):
  File "./atzek.py", line 1203, in <module>
    Atzek()
  File "./atzek.py", line 92, in __init__
    self.root.mainloop()
  File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1023, in mainloop
    self.tk.mainloop(n)
  File "/usr/lib/python2.5/Pmw/Pmw_1_2/lib/PmwBase.py", line 1751, in __call__
    _reporterror(self.func, args)
  File "/usr/lib/python2.5/Pmw/Pmw_1_2/lib/PmwBase.py", line 1777, in _reporterror
    msg = exc_type + ' Exception in Tk callback\n'
TypeError: unsupported operand type(s) for +: 'type' and 'str'
Die Fehlermeldung kommt auch, wenn ich eine Variable nicht übergebe oder falsch bezeichne. Mein OS ist openSUSE 10.2.
Wie wär's, wenn du mal ein kleinen Beispiel-Code zeigst, der diesen Fehler provoziert?
Stephan hat geschrieben:Hat jemand eine Idee, wie ich eine vernünftige Fehlerausgabe bekomme?
Kann es sein, das Pmw mit meinen Fehlern nicht umgehen kann ? :D
Wieso? Das ist doch eine vernünftige Ausgabe! Ein ordinärer Exception-Backtrace. Sie sagt dir, dass in Tkinter was schief geht; wahrscheinlich, weil du einen falschen Typ als Parameter übergibst! Was hat den das mit dem Windowmanager zu tun? Der kommt noch ne ganze Ecke weiter unten...
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

ja, es steht immer das gleiche in der Fehlermeldung.

Hier mal ein Stück Code:

Code: Alles auswählen

def showResult(self, widget):
        start1 = self.entrydic[widget][2].get().strip()
        end1 = self.entrydic[widget][3].get().strip()
        start2 = self.entrydic[widget][8].get().strip()
        end2 = self.entrydic[widget][9].get().strip()
        length1 = ''
        lenght2 = ''
        print 'start1: %s | end1: %s | start2: %s | end2: %s'%(start1, end1, start2, end2)
        if start1 in self.activities:
            self.showActivity(start1, widget)
        else:
            if (start1 != '') and (end1 != ''):
                length1 = defs.returnLength(start1, end1)
                print 'length1: %s'%length1
                if self.doupleStarts:
                    if (start2 != '') and (end2 != ''):
                        length2 = defs.returnLength(start2, end2)
                        print 'length2: %s'%length2
        if (lenght1 != '') and (length2 != ''):
            sum_lenght = defs.TimeCalculator(lenght1, lenght2)
            print sum_lenght
Wie gesagt - das ist mitten aus einem Programm. Wenn ich das ganze unter Linus ausführe, kommt wieder die Meldung:

Code: Alles auswählen

start1: 12:00 | end1:  | start2:  | end2:
Traceback (most recent call last):
  File "./atzek.py", line 1206, in <module>
    Atzek()
  File "./atzek.py", line 92, in __init__
    self.root.mainloop()
  File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1023, in mainloop
    self.tk.mainloop(n)
  File "/usr/lib/python2.5/Pmw/Pmw_1_2/lib/PmwBase.py", line 1751, in __call__
    _reporterror(self.func, args)
  File "/usr/lib/python2.5/Pmw/Pmw_1_2/lib/PmwBase.py", line 1777, in _reporterror
    msg = exc_type + ' Exception in Tk callback\n'
TypeError: unsupported operand type(s) for +: 'type' and 'str'
Unter Windows kommt allerdings folgende Meldung:

Code: Alles auswählen

Error: 1
NameError Exception in Tk callback
  Function: <bound method Atzek.focusOut of <__main__.Atzek instance at
0x009F4030>> (type: <type 'instancemethod'>)
  Args: (<Tkinter.Event instance at 0x00A31E68>,)
  Event type: FocusOut (type num: 10)
Traceback (innermost last):
  File "C:\Python24\lib\Pmw\Pmw_1_2\lib\PmwBase.py", line 1747, in __call__
    return apply(self.func, args)
  File "D:\Dokumente und Einstellungen\Stephan\Eigene
Dateien\Arbeit\Programme\Projekte\Arbeitszeit\atzek.pyw", line 809, in
focusOut
    self.showResult(event.widget)
  File "D:\Dokumente und Einstellungen\Stephan\Eigene
Dateien\Arbeit\Programme\Projekte\Arbeitszeit\atzek.pyw", line 842, in
showResult
    if (lenght1 != '') and (length2 != ''):
NameError: global name 'lenght1' is not defined

================================================
  Event contents:
    char: ??
    delta: 0
    height: ??
    keycode: ??
    keysym: ??
    keysym_num: ??
    num: ??
    send_event: False
    serial: 2191
    state: ??
    time: ??
    type: 10
    widget:
.10438776.10438896.10438976.10661280.10688592.10688792.10688752.10689472.10809176
    width: ??
    x: ??
    x_root: ??
    y: ??
    y_root: ??
Mit dieser Meldung kann ich was anfangen. Das ich nur einen Schreibfehler gemacht habe ist mir schon klar.
Ist Windows doch das bessere Betriebssystem? :wink:
BlackJack

Ich würde mal eher auf einen Fehler in Tkinter in Python 2.5 tippen oder das `Pmw` nicht mit 2.5 zusammenarbeiten mag. Wie sieht's denn aus, wenn Du Dein Programm unter Windows mit 2.5 ausführst oder unter Linux mit 2.4?
lunar

Ich würde erstmal die Testsituation verifizieren!

Hast du die selben Python-Versionen auf beiden Systemen?
Ist da irgendwo systemspezifischer Code drinnen (if 'linux' in sys.platform)...?
Ist das auch die selbe Tkinter Version?
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Ich habe unter Windows mit Python 2.4 und Pmw 1.2 und unter Linux mit Python2.5 und auch Pmw 1.2 getestet. Systemspezifischer Code ist nicht enthalten.
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

So, nun habe ich es auch unter Windows mit Python 2.5 und Pmw 1.2 getestet. Ich kann euch beruhigen - Windows ist doch nicht besser :D .

Ich habe die gleiche Fehlermeldung wie unter Linux bekommen. Scheint tatsächlich ein Fehler zwischen Python 2.5 und Pmw zu sein. Einen downgrade auf Python 2.4 unter Linux habe ich mir mal geschenkt :wink: Unter Windows ein Python 2.5 incl. Pmw zu installieren war einfacher, da ich Windows auf meinem PC nur einmal im Jahr für die Steuererklärung benötige :D :D

Stephan
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Mit Python 2.5 werden die Fehlermeldungen anders an Pmw übergeben. Dadurch erzeugt Pmw immer den gleichen Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "./atzek.py", line 1206, in <module>
    Atzek()
  File "./atzek.py", line 92, in __init__
    self.root.mainloop()
  File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1023, in mainloop
    self.tk.mainloop(n)
  File "/usr/lib/python2.5/Pmw/Pmw_1_2/lib/PmwBase.py", line 1751, in __call__
    _reporterror(self.func, args)
  File "/usr/lib/python2.5/Pmw/Pmw_1_2/lib/PmwBase.py", line 1777, in _reporterror
    msg = exc_type + ' Exception in Tk callback\n'
TypeError: unsupported operand type(s) for +: 'type' and 'str'
Ich habe nun in der Datei PmwBase.py die Zeile 1777 abgeändert. Die Datei liegt bei mir im Verzeichnis /usr/lib/python2.5/Pmw/Pmw_1_2/lib/ (openSUSE 10.2) . Unter Windows sollte die Datei standardmäßig unter C:\\Python25\Lib\Pmw\Pmw_1_2\lib\ zu finden sein (W2k).

Originalzeile:

Code: Alles auswählen

msg = exc_type + ' Exception in Tk callback\n'
geänderte Zeile:

Code: Alles auswählen

msg = str(exc_type) + ' Exception in Tk callback\n'
Damit werden nun auch unter Python 2.5 vernüftige Fehlerausgaben erzeugt.

Stephan
Antworten