我需要做的是循环遍历大量不同的文件,并(尝试)从文件中获取元数据。
我可以创建一个大的if ... 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)
有这么简单的方法吗?
谢谢: - )
答案 0 :(得分:24)
你可以这样做:
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)
答案 1 :(得分:3)
gettattr
function有一个可选的第三个参数,如果该属性不存在则返回默认值,因此你可以使用它:
fun = getattr(modulename, funcname, None)
if fun is None:
print 'function not found "%s" (%s)' % (funcname, arg)
else
fun(arg)
答案 2 :(得分:2)
我发现的方式是:
代码
def My_Function():
print ("Hello World!")
FunctionName = "My_Function"
(FunctionName)()
输出
Hello World!
答案 3 :(得分:0)
就像@mouad所说,callable(function)
可以调用一个函数。
您可以使用此函数从变量内部调用函数:
callable(SAVE())
这将调用指定为arg。
的函数在变量中使用它:
Save = callable(SAVE())
答案 4 :(得分:0)
您也可以尝试
eval('func_name()')