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

+1

Первым аргументом 'getattr' должен быть объект – NullUserException

+0

@Rick, модуль этого имени или объект этого имени? – robert

ответ

3

Это звучит, как вы могли бы хотеть locals() вместо getattr() ...

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

Вы должны использовать GetAttr, когда у вас есть объект, и вы хотите, чтобы получить атрибут этого объекта, а не переменные из локального пространства имен ,

+0

спасибо .. да, вы правы, я был смущен об использовании, я нашел getattr в сообщении где-то, говоря, чтобы сделать это таким образом, чтобы назвать переменное имя функции, но, видимо, это было неправильно – Rick

+1

@Rick, я не получаю он, 'functionname' является модулем, а вы _call_ его с параметром? –

0

Первый аргумент getattr - это объект, у которого есть интересующий вас атрибут. В этом случае вы пытаетесь получить атрибут функции, я предполагаю. Таким образом, первым аргументом должна быть функция. Не строка, содержащая имя функции, а сама функция.

Если вы хотите использовать строку для этого, вам нужно будет использовать что-то вроде locals() [fn], чтобы найти фактический объект функции с этим именем.

Во-вторых, вы передаете имя функции getattr дважды. Функция не имеет в себе атрибута. Вы имели в виду второй аргумент x? Наверное, я действительно не понимаю, что вы пытаетесь сделать здесь.

+0

его от импорта так вот почему его так, я обновил OP – Rick

Смежные вопросы