4

我有一个像这样的字符串:

str = "pwd.getpwuid(1000)"

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

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

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

然后采取lis[0],如果它不包含"("")"我打电话

importlib.import_module(lis[0])

然后再次评估。

我可以让同样的事情变得更好吗?

4

2 回答 2

0

如何用一些正则表达式拆分 lis[2] 中函数的位置参数和 lis[3] 中的命名参数并做

lib = importlib.import_module(lis[0])
lib.__dict__[lis[1]](*list[2],**list[3])
于 2014-04-03T13:46:54.820 回答
0

找到了解决方案:

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

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

eval() 就可以了!

(lambda 或 def 显然是相同的)

于 2014-04-03T14:17:36.567 回答