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

What the what?

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

我发现您的尝试有些问题。首先,self.name变量不是本地范围。它们要么是实例的一部分,要么是类的一部分。局部变量是可以从当前函数范围访问的变量,但不能从全局范围访问。例如,在下面的代码中,您会看到fooand bar,但不是baz

baz = 1

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

来电silly()

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

其次,locals()andglobals()字典不解析点运算符,也不会调用函数。

您想要做的是使用类似的东西getattr,或者创建一个更适合您的 api(您尝试编写的代码不是非常惯用的 Python)。以下是可能的样子getattr

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

getattris 将在引擎盖下进行所有正确的查找以找到macN_le. 一旦你有一个对象的引用,你就可以调用.text()它。

希望有帮助!

于 2012-08-08T10:47:34.770 回答