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()'.
何か案が?
なぜそのようにオブジェクトを操作したいかはわかりませんが、構文が間違っていることは間違いありません。
locals()['self.mac'+str(i)+'_le'].text()
「動作する」はずです。
なに?
m = getattr(self, 'mac%d_le' % i).text()
私はあなたが試みていることにいくつか間違っているのを見ます。まず、self.name
変数はローカルスコープではありません。それらはインスタンスの一部であるか、クラスの一部です。ローカルは、現在の関数スコープからアクセスできる変数ですが、グローバルスコープからはアクセスできません。たとえば、以下のコードでは、とが表示されますが、表示さfoo
れbar
ません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()
。
お役に立てば幸いです。