MrR
MrR

Reputation: 171

Calling a function from a string in Python throws error

I am trying to call a function from a string in Python as explained in Calling a function of a module from a string with the function's name in Python.

Unfortunately, this doesn't work, and the Python interpreter throws an error: TypeError: 'str' object is not callable

def current(self, t):
    if self.iMode == None:
        return self.i
    else:
        return getattr(self, 'iMode')(t)

The error refers to the last line. iMode has been set to sinx(t), that has been declared in the class.

Can anyone help me please?

Upvotes: 0

Views: 114

Answers (2)

Ber
Ber

Reputation: 41873

From the error message it is obvious that your attribute was set to 'sinx(t)' (the string literal).

You should set it the function reference sinx instead, which is a callable.

However, as zhangyangu already said, in you example using getattr() is not needed. Maybe you really want to use a parameter (string reference) instead of the literal 'iMode'?

Upvotes: 2

zhangyangyu
zhangyangyu

Reputation: 8620

From the error, your iMode is a string. The iMode is not a method. There must be something wrong with your declaration. And in the class you can use self.iMode, no need to use getattr.

I think you may look for the function like eval.

Upvotes: 0

Related Questions