2017-01-23 5 views
1

私はpython2からpython3にtestframeworkを転送しています。 私はexec関数の変更にexec文に問題があります。 実行時に関数が呼び出されるxlsファイルによって決まります。 私はlocal()とglobal()を与えようとしましたが、execの代わりにexecHelperを試しました(下記の例を参照)。また、testhelpで直接exechelper関数の名前空間テクニックを試しましたが、常にいくつかの名前は名前空間に見つかりませんでした。 ... 提案はありますか? exec関数のグローバル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

なぜそこにexecが必要ですか? –

+0

問題を表示するのは簡単な例に過ぎませんが、その場合は必要ありません。その例では問題は最も簡単な方法で説明されています – kurtvds

+0

それを使用するのが理にかなっている場合を表示できますか? –

答えて

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

使用は

だからパイソン3でのPython 3 でのPython 2とexec()内のexecの間には大きな違いがあり、私たちは持参する必要がありますexecial()のスコープにvarialbeを返します。

+0

申し訳ありませんが私は答えたと思いました。それはグローバルなことに感謝します – kurtvds

関連する問題