string to command

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.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Beitragvon murph » Freitag 9. Juni 2006, 20:41

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 9. Juni 2006, 20:55

murph hat geschrieben:aber wie übergebe ich dem __import__ ein 'as'?

Hi murph!

Code: Alles auswählen

ver = __import__("sys").version
print ver

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 9. Juni 2006, 21:07

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.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Beitragvon murph » Freitag 9. Juni 2006, 22:17

das will er nicht!
gleiche fehlermeldung!
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

der code (nicht, dass ich was übersehen habe trotz gründlichen suchens)

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

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!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Freitag 9. Juni 2006, 22:46

murph hat geschrieben:NameError: global name 'sqlite_module' is not defined

Hi murph!

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()

Dadurch lassen sich Fehler vermeiden, da man sofort weiß, ob man gerade eben eine Klasse instanziert oder eine Funktion ausführt.
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.
BlackJack

Beitragvon BlackJack » Freitag 9. Juni 2006, 22:56

Bitte versuch doch mal dich ein bisschen an Namenskonventionen zu halten. Funktionsnamen bitte klein und Klassennamen mit einem Grossbuchstaben beginnen.

murph hat geschrieben:

Code: Alles auswählen

def Importer():
    getter = UserSettings()
    module = getter.get_module()
    sqlite_module = __import__(module)


`getter`, `module` und `sqlite_module` sind Namen die nur innerhalb der Funktion definiert sind. Ausserhalb sind die natürlich nicht bekannt. Daher die Ausnahme.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder