5

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

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

for i in list_of_funcs:
    exec('pageprocs.%s()' % i)

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

4

1 回答 1

11
for i in list_of_stats:
    getattr(pageprocs, i, lambda: None)()

lambda: None部分是可选的,但AttributeError如果指定的函数不存在(它是一个匿名的无操作函数),将阻止被引发。

于 2012-07-28T23:46:33.507 回答