我有5个对象,mac5_le()
,mac4_le
等等。我试图从每个如下对象的一些价值,使用locals迭代对象名称时获取KeyError()
for i in range(5,-1,-1):
m = locals()['self.mac'+str(i)+'_le.text()']
print m
我收到错误的KeyError: 'self.mac5_le.text()'.
任何想法?
我有5个对象,mac5_le()
,mac4_le
等等。我试图从每个如下对象的一些价值,使用locals迭代对象名称时获取KeyError()
for i in range(5,-1,-1):
m = locals()['self.mac'+str(i)+'_le.text()']
print m
我收到错误的KeyError: 'self.mac5_le.text()'.
任何想法?
什么是什么?
m = getattr(self, 'mac%d_le' % i).text()
亲爱的伊格纳西奥·巴斯克斯 - 艾布拉姆斯,抱歉不回复,因为我被困在不同的循环中。你的答案完美无缺。非常感谢。 – manz 2012-11-02 10:20:45
不知道你为什么会想Munge时间围绕这样的对象,但你一定有你的语法错误:
locals()['self.mac'+str(i)+'_le'].text()
应该“工作”。
+1教我“munge”一词。 – ThePadawan 2012-08-08 10:45:02
您好Tim Pietzcker,抱歉我没有回复,因为我陷入了其他循环。你说的答案工作正常,但在我的情况下,我玩的是父类的方法。无论如何非常感谢您的快速回复。 – manz 2012-11-02 09:47:42
我发现你尝试的东西有些问题。首先,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()
。
希望有帮助!
你可以给更多的上下文 - 你想要做什么,为什么你要用'locals()'做奇怪的事情? – dbr 2012-08-08 10:46:45
亲爱的DBR,抱歉没有回复,因为我被困在其他一些循环中。我有类似名称的对象,并想通过他们的名字循环。但是它们是在父类中构造的。 ** getattr **也不起作用。请帮助。 - Manjunath Bhat – manz 2012-11-02 10:01:06
m = getattr(self,'mac%d_le'%i).text()的作品。非常感谢。 – manz 2012-11-02 10:22:55