我有 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()
应该管用”。
What the what?
m = getattr(self, 'mac%d_le' % i).text()
我发现您的尝试有些问题。首先,self.name
变量不是本地范围。它们要么是实例的一部分,要么是类的一部分。局部变量是可以从当前函数范围访问的变量,但不能从全局范围访问。例如,在下面的代码中,您会看到foo
and 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
getattr
is 将在引擎盖下进行所有正确的查找以找到macN_le
. 一旦你有一个对象的引用,你就可以调用.text()
它。
希望有帮助!