2010-08-18 61 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