Dynamisches Moduleladen - wie am besten?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
theliquidwave
User
Beiträge: 221
Registriert: Sonntag 1. Juni 2008, 09:08

Hallo,
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
Ich bin aber nicht ganz zufrieden damit.
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!
Grüßle.
deets

sys.exc_info() ist dein Freund.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Ich habe mir für meinen IRC-Bot ein Plugin-System geschrieben: http://paste.pocoo.org/show/539251/, welches "Plugins" dynamisch lädt und wieder "neu laden". Es wird das imp-Modul zum Laden verwendet, außerdem ist es in Anlehnung an zine entstanden. Kannst dich an dem Code orientieren oder ihn einfach komplett übernehmen.

//Edit: Fehler in unload_plugins behoben
the more they change the more they stay the same
Antworten