aber wie übergebe ich dem __import__ ein 'as'?
ich will ja später nur noch eine variable nutzen, damit man diesen code mit allen sqlite-wrappern nutzen kann, die die standardfunktionen haben.
string to command
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi murph!murph hat geschrieben:aber wie übergebe ich dem __import__ ein 'as'?
Code: Alles auswählen
ver = __import__("sys").version
print ver
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Code: Alles auswählen
sqlite_module = __import__("sqlite")
conn = sqlite_module.connect(":memory:")
...
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
das will er nicht!
gleiche fehlermeldung!
also meiner ansicht nach sollte das klappen, die variablen sind problemlos vergeben. ich verstehe nicht,warum, wenn gerolds ansatz doch klappen sollte, das nicht funktioniert!
gleiche fehlermeldung!
der code (nicht, dass ich was übersehen habe trotz gründlichen suchens)Traceback (most recent call last):
File "./sqlite-manager.py", line 103, in ?
starter()
File "./sqlite-manager.py", line 85, in starter
executer.greeting()
File "./sqlite-manager.py", line 91, in greeting
self.conn = sqlite_module.connect(self.conn_var)
NameError: global name 'sqlite_module' is not defined
Code: Alles auswählen
def Importer():
getter = UserSettings()
module = getter.get_module()
sqlite_module = __import__(module)
class main:
def greeting(self):
Importer()
self.conn_var = raw_input("Please enter the Path to the SQLite-Database: \n")
self.conn = sqlite_module.connect(self.conn_var)
self.cur = self.conn.cursor
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi murph!murph hat geschrieben:NameError: global name 'sqlite_module' is not defined
Zwei Sachen:
1. Verwende keine Bindestriche in Modulnamen, da ein Bindestrich für Python ein "Minus" darstellt.
2. Variablen, die du in einer Funktion erstellst -- egal wie -- sind in deren Gültigkeit auf den lokalen Namensraum dieser Funktion beschränkt. Entweder du setzt vor der Verwendung die Variable mit "global" in den globalen Namensraum oder du importierst nicht in einer Funktion.
mfg
Gerold

PS: Klassennamen sollten mit einem Großbuchstaben beginnen und Funktions-/Methodennamen sollten mit einem Kleinbuchstaben beginnen.
Code: Alles auswählen
class HalloWelt:
def say_yes(self):
print "Yes!"
h = HalloWelt() # Sofort als Instanzierung einer Klasse erkennbar
h.say_yes()
Meines Erachtens, wäre "import_modules()" ein guter Name für die Funktion "Importer()", da er ausdrückt was getan wird. "Importer()" sieht aus wie eine Klasse und hat auch den Namen eines Objektes. Dass keine Klasseninstanz zurück gegeben wird -- verwirrt.

Zuletzt geändert von gerold am Freitag 9. Juni 2006, 22:57, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Bitte versuch doch mal dich ein bisschen an Namenskonventionen zu halten. Funktionsnamen bitte klein und Klassennamen mit einem Grossbuchstaben beginnen.
`getter`, `module` und `sqlite_module` sind Namen die nur innerhalb der Funktion definiert sind. Ausserhalb sind die natürlich nicht bekannt. Daher die Ausnahme.murph hat geschrieben:Code: Alles auswählen
def Importer(): getter = UserSettings() module = getter.get_module() sqlite_module = __import__(module)