code mit compile und exec:
Verfasst: Mittwoch 4. August 2010, 15:33
folgender code (ich habe ihn so einfach gemacht wies ging) sollte zur laufzeit ausgeführt werden
execode.py
1) rufe ich den direkt auf, dann gehts
2) von einem größeren programm aus als exec ausgefüht (drpython als script) aus ist die Ausgabe eigenartig:
2 a) so geht s
2b) so geht nicht (ist eigentlich das gleiche wie bei 1))
(das eigenartige ist, dass oben (und unten), wenn "heraussen" das Class1 angelegt wird, es klappt. wird ein Class1 Objekt jedoch IN Class2 angelegt (versucht), dann kommt die untenstehende Meldung mit Name Error.
Wie kann es da zu einem Name Error kommen?
execode.py
Code: Alles auswählen
class Class1():
def __init__(self):
print "class1"
class Class2():
def __init__(self):
print "class2"
cl1 = Class1()
cl = Class2()
Code: Alles auswählen
f = open("execode.py", 'r')
scripttext = f.read()
f.close()
code = compile(scripttext + '\n', "~/tmp.txt", 'exec')
exec(code)
2 a) so geht s
Code: Alles auswählen
class Class1():
def __init__(self):
print "class1"
class Class2():
def __init__(self, oldclass):
print "class2"
#cl1 = Class1()
cl = Class1()
cl = Class2(self)
(das eigenartige ist, dass oben (und unten), wenn "heraussen" das Class1 angelegt wird, es klappt. wird ein Class1 Objekt jedoch IN Class2 angelegt (versucht), dann kommt die untenstehende Meldung mit Name Error.

Code: Alles auswählen
class Class1():
def __init__(self):
print "class1"
class Class2():
def __init__(self, oldclass):
print "class2"
cl1 = Class1()
cl = Class1()
cl = Class2(self)
Code: Alles auswählen
cl1 = Class1()
<type 'exceptions.NameError'>: global name 'Class1' is not defined