2017-01-23 3 views
1

Ich übertrage ein Testframework von Python2 nach Python3. Ich habe Probleme mit der exec-Anweisung zur exec-Funktionsänderung. Zur Laufzeit entscheide ich mich abhängig von einer xls-Datei, welche Funktion aufgerufen wird. Ich habe versucht, local() und global() und versuchte auch die execHelper anstelle von exec (siehe Beispiel unten) Ich versuchte auch die Namespace-Technik der exechelper-Funktion direkt in der Testfunktion, aber immer einige Namen im Namespace nicht gefunden. ... irgendwelche Vorschläge?exec python2 vs python3

def execHelper(command,callerobject): 
    ns = {} 
    exec(command,ns) 
    for name, value in ns.items(): 
     setattr(callerobject, name, value) 

def myfunction2(val1,val2): 
    return val1 * val2 

class myclass(): 
    def myfunction1(self,val1,val2): 
     return val1 + val2 

    def test(self): 
     a = 5 
     self.b = 10 
     exec("result = self.myfunction1(a,self.b)+myfunction2(a,self.b)") 
     print(result) 


test = myclass() 
test.test() 
+2

Warum brauchen Sie dort Exec? –

+0

es ist nur ein einfaches Beispiel, um das Problem zu zeigen, natürlich würde ich das in diesem Fall nicht benötigen. aber mit diesem Beispiel wird das Problem am einfachsten erklärt – kurtvds

+0

Können Sie den Fall zeigen, wo es Sinn macht, es zu benutzen? –

Antwort

0
def myfunction2(val1,val2): 
    return val1 * val2 

class myclass(): 
    def myfunction1(self,val1,val2): 
     return val1 + val2 


    def test(self): 
     a = 5 
     self.b = 10 
     exec("global result;result = self.myfunction1(a,self.b)+myfunction2(a,self.b)") 
     print(result) 


test = myclass() 
test.test() 

Verwendung global in exec Funktion

Es gibt einen großen Unterschied zwischen exec in Python 2 und exec() in Python 3. So in Python 3, haben wir das bringen, Ergebnis varialbe in den Geltungsbereich von exec().

+0

Entschuldigung ich dachte, ich antwortete. Es funktioniert viel mit der globalen Sache – kurtvds

Verwandte Themen