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