Executing a function by variable name in Python

Question:

What I need to do is loop over a large number of different files and (try to) fetch metadata from the files.

I can make a large if…elif… and test for every extension, but I think it would be much easier to store the extension in a variable, check if a function with that name exists, and execute it.

This is my current solution, taken from another stackoverflow thread:

try:
    getattr(modulename, funcname)(arg)
except AttributeError:
    print 'function not found "%s" (%s)' % (funcname, arg)

There is a problem with this:
If the underlying function raises an AttributeError, this is registered as a “function not found” error.
I can add try…except blocks to all functions, but that would not be particularly pretty either …

What I’m looking for is more something like:

if function_exists(fun):
  execute_function(fun, arg)

Is there a straightforward way of doing this?

Thanks 🙂

Asked By: Martin Tournoij

||

Answers:

The gettattr function has an optional third argument for a default value to return if the attribute does not exist, so you could use that:

fun = getattr(modulename, funcname, None)

if fun is None:
    print 'function not found "%s" (%s)' % (funcname, arg)
else
    fun(arg)
Answered By: David Webb

You can do :

func = getattr(modulename, funcname, None):
if func:
    func(arg)

Or maybe better:

try:
    func = getattr(modulename, funcname)
except AttributeError:
    print 'function not found "%s" (%s)' % (funcname, arg)
else:
    func(arg)
Answered By: mouad

Like @mouad said, callable(function) can call a function.

You can use this to call a function from inside a variable using this:

callable(SAVE())

This will call the function that is specified as the arg.

To use this inside a variable:

Save = callable(SAVE())
Answered By: EgMusic

You can also try

eval('func_name()')
Answered By: user3827333

The way I found is:

Code

def My_Function():
     print ("Hello World!")

FunctionName = "My_Function"

(FunctionName)()

Output

Hello World!
Answered By: Wynn
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.