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())
精彩评论