我有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()'.
任何想法?
答案 0 :(得分:3)
不确定为什么你会想要围绕这种方式移动对象,但你的语法肯定是错的:
locals()['self.mac'+str(i)+'_le'].text()
应该“有效”。
答案 1 :(得分:3)
什么是什么?
m = getattr(self, 'mac%d_le' % i).text()
答案 2 :(得分:0)
我看到你正在尝试的东西有些不对劲。首先,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()
。
希望有所帮助!