通过变量名在Python中执行函数

14 投票
5 回答
22702 浏览
提问于 2025-04-16 14:11

我需要做的是遍历很多不同的文件,并尝试从这些文件中获取一些元数据。

我可以写一个很长的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)

撰写回答