Seite 1 von 1

Unerklärliche Ausnahme nach Update auf 2.7.1

Verfasst: Mittwoch 19. Januar 2011, 19:32
von Gremlin
Hallo, ich mal wieder.

Ich habe vorhin von Python 2.7 auf 2.7.1 aktualisiert und erhalte nun einen Fehler in meinem Programm, der natürlich vorher nicht da war.
Ein Fehler an sich wäre ja kein Problem, wenn ich ihn nachvollziehen könnte, aber das hier übersteigt meine Vorstellungskraft etwas:

Ich habe ein Dictionary, dieses wird gepickled in einem mit base64 und AES verschlüsselten String über das Netzwerk übertragen.
Das Dictionary enthält, unter anderem, einen String welcher Python Quellcode repräsentiert:

Code: Alles auswählen

b"""from __future__ import unicode_literals
import wx
import wc

def main(thread, panel, mod, path, info, callable=None, args=(), kwargs={}):
    wc.show_dialog(panel, path)
    if callable is not None:
        wx.CallAfter(callable, *args, **kwargs)"""
Diesen String wandle ich in ein Modul um, wie es von sma hier beschrieben wurde und führe die Funktion main() in einem Thread aus. (Die Umwandlung geschieht auch im Thread.) Das hat bis Python 2.7 auch wunderbar funktioniert.

Mit dem Update auf 2.7.1 jedoch, erhalte ich folgenden Fehler:
File: "<string>", line 8, in main
AttributeError: 'NoneType' object has no attribute 'CallAfter'
Diesen Fehler habe ich auch mit jedem anderen "Namen" der nach Zeile 8 verwendet wird. Ja, Zeile 8, vor dieser Zeile geht alles seinen gewohnten Gang, aber ab dieser Zeile, verweist jeder Name auf "None"! Und dabei ist es unwichtig ob Zeile 8 die letzte Zeile ist.

Ich versteh es nicht. :(
Tut es jemand anderes?

Re: Unerklärliche Ausnahme nach Update auf 2.7.1

Verfasst: Mittwoch 19. Januar 2011, 19:43
von Xynon1
Wenn dein Objekt ein NoneType ist, also "None" ist, dann liegt das bei dir warscheinlich daran das du irgendeine Funktion ausführst und einen Rückgabe Wert fängst. Da diese Funktion kein "return" hat, erhälst du None.
Eine Möglichkeit den Fehler zu behandeln wäreauf None zu prüfen, zB: mit "if obj is None: ..."

Re: Unerklärliche Ausnahme nach Update auf 2.7.1

Verfasst: Mittwoch 19. Januar 2011, 20:38
von Gremlin
Nein Nein, mit 100%iger Wahrscheinlichkeit liegt es nicht an der Logik, das denke darf ich inzwischen bedenkenlos behaupten. :P

Vielleicht eine etwas einfachere Erklärung des Problems:

Code: Alles auswählen

>>> test = 'blub'
>>> test
None

Re: Unerklärliche Ausnahme nach Update auf 2.7.1

Verfasst: Mittwoch 19. Januar 2011, 21:29
von BlackJack
@Gremlin: Da ist wohl beim Update gründlich was schief gelaufen.

Re: Unerklärliche Ausnahme nach Update auf 2.7.1

Verfasst: Mittwoch 19. Januar 2011, 23:31
von Gremlin
Naja, das mit dem Interpreter war jetzt nur ein fiktives Beispiel um das Problem zu verdeutlichen. Der Interpreter macht natürlich kein None aus dem 'blub'.
Aber gut, werd ichs halt morgen mit einer Neuinstallation versuchen. :K

Re: Unerklärliche Ausnahme nach Update auf 2.7.1

Verfasst: Donnerstag 20. Januar 2011, 00:01
von BlackJack
@Gremlin: Wenn das kein echter Quelltext mit echtem Ergebnis war, dann war meine Antwort dazu auch nicht "echt". :roll:

Vielleicht funktioniert Dein `exec`-Code auch einfach nicht mehr. Das ist ja schon ein wenig "magisch".

Re: Unerklärliche Ausnahme nach Update auf 2.7.1

Verfasst: Donnerstag 20. Januar 2011, 16:31
von Gremlin
BlackJack hat geschrieben:Vielleicht funktioniert Dein `exec`-Code auch einfach nicht mehr. Das ist ja schon ein wenig "magisch".
Vermutlich. Hab nun wieder 2.7. :o