Seite 1 von 2

Verfasst: Freitag 9. Juni 2006, 20:41
von murph
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.

Verfasst: Freitag 9. Juni 2006, 20:55
von gerold
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
:-)

Verfasst: Freitag 9. Juni 2006, 21:07
von gerold

Code: Alles auswählen

sqlite_module = __import__("sqlite")
conn = sqlite_module.connect(":memory:")
...

Verfasst: Freitag 9. Juni 2006, 22:17
von murph
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!

Verfasst: Freitag 9. Juni 2006, 22:46
von gerold
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. :?

Verfasst: Freitag 9. Juni 2006, 22:56
von BlackJack
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.