开发者

Executing a function by variable name in Python [duplicate]

This question already has answers here: How can I select a variable by (string) name? (5 answers) Calling a function of a module by using its name (a string) (18 answers) Closed 4 months ago.

What I need to do is loop over 开发者_如何学Ca 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 :-)


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)


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)


The way I found is:

Code

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

FunctionName = "My_Function"

(FunctionName)()

Output

Hello World!


You can also try

eval('func_name()')


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())
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜