通过变量名在Python中执行函数
我需要做的是遍历很多不同的文件,并尝试从这些文件中获取一些元数据。
我可以写一个很长的if...elif...语句,逐个检查每种文件扩展名,但我觉得把扩展名存储在一个变量里,检查一下有没有对应的函数,然后执行它,这样会简单很多。
这是我目前的解决方案,参考了另一个StackOverflow的讨论:
try:
getattr(modulename, funcname)(arg)
except AttributeError:
print 'function not found "%s" (%s)' % (funcname, arg)
不过这里有个问题:如果底层的函数抛出了一个AttributeError(属性错误),这会被当作“找不到函数”的错误来处理。
我可以在所有函数里加上try...except块来处理这个问题,但这样看起来也不太好看……
我想要的更像是:
if function_exists(fun):
execute_function(fun, arg)
有没有简单的方法可以做到这一点呢?
谢谢 :-)
5 个回答
3
getattr
函数有一个可选的第三个参数,可以用来指定一个默认值,如果你要查找的属性不存在,就会返回这个默认值。所以你可以这样使用它:
fun = getattr(modulename, funcname, None)
if fun is None:
print 'function not found "%s" (%s)' % (funcname, arg)
else
fun(arg)
4
我找到的方法是:
代码
def My_Function():
print ("Hello World!")
FunctionName = "My_Function"
(FunctionName)()
输出结果
Hello World!
27
你可以这样做:
func = getattr(modulename, funcname, None):
if func:
func(arg)
或者可能这样做更好:
try:
func = getattr(modulename, funcname)
except AttributeError:
print 'function not found "%s" (%s)' % (funcname, arg)
else:
func(arg)