ich versuche gerade, Module dynamisch zu laden.
Die Module befinden sich im Ordner "modules".
Wenn man beispielsweise "test_module" als Parameter übergibt, heißt die Datei "test_module.py" und die Klasse, die automatisch instanziert wird, heißt "TestModule".
Hier ist erstmal mein Code:
Code: Alles auswählen
def load_module(self, name):
name = name.lower()
parts = name.split("_")
classname = ""
for part in parts:
classname += part.title()
try:
if name in self.pastmodules:
module = reload(sys.modules["modules." + name])
else:
module = getattr(__import__("modules." + name), name)
self.pastmodules.append(name)
self.modules[name] = getattr(module, classname)(self)
return True
except Exception, e:
print e
pass
return False
def unload_module(self, name):
if name in self.modules:
del self.modules[name]
del sys.modules["modules." + name]
return True
return False
Wenn ein Fehler beim Laden auftritt, wird keine Exception ausgegeben, obwohl ich "print e" benutze. Selbst wenn diese ausgegeben würde, wäre es nur eine Zeile.
Wie kriege ich es also hin, dass ich den kompletten Traceback bekomme? Ich habe schon mit dem traceback-Module herumgespielt. Allerdings kriege ich es nicht hin, denn ich möchte die Exception trotzdem abfangen. Ergo: Die Exception soll vollständig mit Traceback ausgeeben werden, und dennoch soll die Exception abgefangen werden (so, dass das Programm sich nicht beendet).
Hat dazu jemand eine Idee?
Gruß und vielen Dank!