2016-05-11 21 views
0

「self」が定義されていないのはなぜですか?このコードはクラス内の関数の下にあります。 main_rootは、self.main_root =要素として___init____で初期化されているため、クラス内のどこにでもアクセス可能でなければなりません。関数の最初のパラメーターも 'self'です。私はroot_string = "main_root[0][1]"を設定した場合Python exec()が動作しない

root_string = "self.main_root[0][1]" 

globals() 
code_locals = {'temp_string':""} 

command_string = "temp_string = str(" + root_string + ".tag) + str(" + root_string + ".attrib)" 
exec(command_string,globals(),code_locals) 

することは、私はmain_rootが定義されていないでしょう。私は

答えて

1

アクセスが必要な場合selfexec stサンプルの中にではなく、第3パラメータをcode_localsではなく渡す必要があります。

+0

locals()を使用することができました。ありがとう – user1179317

0

予めmain_root = copy.deepcopy(self.main_root)を割り当てようとしても、それは

root_string =self.main_root[0][1] 

たり、文字列としてそれをしたい場合は、あなたが入力する変数を変換する必要があり

root_string = str(self.root[0][1]) 

としてそれを行う(文字列でなければなりません、intなど)を初期化することはできません。 "self.main_root [0] [1]"

+0

文字列を使用するexec()を使用しています。また、この例ではアドレス「[0] [1]」は別の関数からのものです。アドレス[0] [1]が文字列としてあなたに来た場合、あなたのソリューションを提案する方法 – user1179317

関連する問題