处理Python中字符串列表中的函数

5 python string function exec

我有一个模块,我导入到我的主应用程序,名为pageprocs.py,其中包含一组函数,它们生成不同的内容并以字符串形式返回.pageprocs应该是一种允许经过身份验证的用户为不同的内容类型创建插件的方法.

然后我有一个字符串列表:['check_stats','build_table','build_ace'],它们是pageprocs中某些函数的名称.我需要按照它们在列表中的顺序执行这些函数,并且在不使用exec()的情况下找不到这样做的方法:

for i in list_of_funcs:
    exec('pageprocs.%s()' % i)
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎是一个非常糟糕的主意,并且不容易在用户代码中捕获任何异常.是否有以这种方式运行代码的替代方案,或者是否有人对用户定义的内容生成有任何建议(我问这个因为我可能接近整个情况的错误).

kin*_*all 11

for i in list_of_stats:
    getattr(pageprocs, i, lambda: None)()
Run Code Online (Sandbox Code Playgroud)

lambda: None部分是可选的,但AttributeError如果指定的函数不存在则会阻止被引发(这是一个匿名的无效函数).

  • 希望我有声誉来修改它.很干净,很有效. (2认同)