2010-08-18 33 views
0

我试图做到以下几点:python,在getattr中使用两个变量?

import sys; sys.path.append('/var/www/python/includes') 
import functionname 

x = 'testarg' 
fn = "functionname" 
func = getattr(fn, fn) 
func (x) 

,但我得到一个错误:

"TypeError: getattr(): attribute name must be string" 

我已经打电话GETATTR以前试过,但它仍然不能正常工作:

str(fn) 

我不明白为什么会发生这种情况,有什么建议值得赞赏

+0

我得到“AttributeError:'str'对象没有属性'functionname'”,这对我更有意义。我认为你的例子不完整。 – robert 2010-08-18 21:19:20

+1

'getattr'的第一个参数应该是一个对象 – NullUserException 2010-08-18 21:20:39

+0

@Rick,该名称的模块或该名称的对象? – robert 2010-08-18 21:24:04

回答

3

这听起来像你可能会想locals()代替getattr() ...

x = 'testarg' 
fn = "functionname" 
func = locals()[fn] 
func (x) 

您应该使用GETATTR,当你有一个对象,你想获得该对象的属性,而不是从本地命名空间变量。

+0

谢谢..是的,你是对的,我对使用感到困惑,我发现getattr在某个地方发布说这样做来调用变量函数名称,但显然这是不正确的 – Rick 2010-08-18 21:28:57

+1

@Rick,我没有得到它,'functionname'是一个模块,你用参数调用它? – 2010-08-18 21:33:54

0

getattr的第一个参数是具有您感兴趣的属性的对象。在这种情况下,您试图获取函数的属性,我假设。所以第一个参数应该是这个函数。不是包含函数名称的字符串,而是函数本身。

如果您想为此使用字符串,您需要使用locals()[fn]之类的名称来查找具有该名称的实际函数对象。

其次,您将函数名称传递给getattr两次。该函数本身没有作为属性。你的意思是第二个参数是x?我想,在这里我没有真正明白你想要做什么。

+0

它从一个进口,所以这就是为什么它那样,我更新了OP – Rick 2010-08-18 21:26:55