从包含全名的字符串中获取函数

时间:2014-04-03 13:22:54

标签: python eval python-importlib

我有一个字符串:

str = "pwd.getpwuid(1000)"

现在,如果我尝试eval()它可能引发异常,因为我还没有导入pwd(或者如果我有的话,可能没有)。

所以我决定编写一个解析器:将该字符串拆分为"。"并获得一个清单:

lis = ["pwd", "getpwuid(1000)"]

然后选择lis[0],如果它不包含"("")"我致电

importlib.import_module(lis[0])

然后又是eval。

我可以做同样的事情吗?

2 个答案:

答案 0 :(得分:0)

如何在lis [2]中分割函数的位置args和lis [3]中的命名args与一些正则表达式并执行

lib = importlib.import_module(lis[0])
lib.__dict__[lis[1]](*list[2],**list[3])

答案 1 :(得分:0)

找到解决方案:

我必须将字符串更改为包含函数体:

str = "(lambda x: __import__('pwd').getpwuid(x))(1000)"

eval()就可以了!

(lambda或def显然是相同的)