Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中按变量名执行函数_Python - Fatal编程技术网

在Python中按变量名执行函数

在Python中按变量名执行函数,python,Python,我需要做的是遍历大量不同的文件,并尝试从这些文件中获取元数据 我可以做一个大的如果…elif。。。并对每个扩展进行测试,但我认为将扩展存储在变量中、检查是否存在具有该名称的函数并执行它会更容易 这是我当前的解决方案,取自另一个stackoverflow线程: try: getattr(modulename, funcname)(arg) except AttributeError: print 'function not found "%s" (%s)' % (funcname,

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

我可以做一个大的如果…elif。。。并对每个扩展进行测试,但我认为将扩展存储在变量中、检查是否存在具有该名称的函数并执行它会更容易

这是我当前的解决方案,取自另一个stackoverflow线程:

try:
    getattr(modulename, funcname)(arg)
except AttributeError:
    print 'function not found "%s" (%s)' % (funcname, arg)
这有一个问题: 如果基础函数引发AttributeError,则会将其注册为函数未找到错误。 我可以在所有函数中添加try…除了块,但这也不是特别漂亮

我要找的更像是:

if function_exists(fun):
  execute_function(fun, arg)
有没有一种简单易行的方法

谢谢:-

如果属性不存在,则有一个用于返回默认值的可选第三个参数,因此您可以使用该参数:

fun = getattr(modulename, funcname, None)

if fun is None:
    print 'function not found "%s" (%s)' % (funcname, arg)
else
    fun(arg)
你可以做:

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)
正如@mouad所说,callablefunction可以调用函数

您可以使用以下命令从变量内部调用函数:

callable(SAVE())
这将调用指定为arg的函数

要在变量中使用此选项,请执行以下操作:

Save = callable(SAVE())
你也可以试试

eval('func_name()')
我发现的方式是:

代码

输出

Hello World!

如果模块有一个属性func不可调用,我会用try:和catch TypeError包装funcarg。@Wooble:好建议,或者他也可以这样做:if func和callablefunc:应该是evalFunctionName
Hello World!