2

5つのオブジェクト、mac5_le()などがmac4_leあります。私は次のように各オブジェクトからいくつかの値を抽出しようとしています、

for i in range(5,-1,-1):
     m = locals()['self.mac'+str(i)+'_le.text()']
     print m

私は次のようにエラーを取得していますKeyError: 'self.mac5_le.text()'.

何か案が?

4

3 に答える 3

3

なぜそのようにオブジェクトを操作したいかはわかりませんが、構文が間違っていることは間違いありません。

locals()['self.mac'+str(i)+'_le'].text()

「動作する」はずです。

于 2012-08-08T10:41:41.780 に答える
3

なに?

m = getattr(self, 'mac%d_le' % i).text()
于 2012-08-08T10:45:38.093 に答える
0

私はあなたが試みていることにいくつか間違っているのを見ます。まず、self.name変数はローカルスコープではありません。それらはインスタンスの一部であるか、クラスの一部です。ローカルは、現在の関数スコープからアクセスできる変数ですが、グローバルスコープからはアクセスできません。たとえば、以下のコードでは、とが表示されますが、表示さfoobarませんbaz

baz = 1

def silly():
    # These two variables are local
    foo = 2
    bar = 3
    print locals()

呼び出しsilly()

>>> silly()
{'foo': 2, 'bar': 3}

次に、locals()およびglobals()ディクショナリはドット演算子を解決せず、関数を呼び出しません。

あなたがしたいのは、のようなものを使用するかgetattr、あなたにとってよりうまく機能するAPIを作成することです(あなたが書き込もうとしているコードはあまり慣用的なPythonではありません)。これが次のようになりgetattrます:

for i in range(5,-1,-1):
    m = getattr(self, 'mac'+str(i)+'_le').text()
    print m

getattrを見つけるためにフードの下ですべての正しいルックアップを行いますmacN_le。オブジェクトへの参照を取得したら、それを呼び出すことができます.text()

お役に立てば幸いです。

于 2012-08-08T10:47:34.770 に答える