从包含完整nam的字符串获取函数

2024-04-19 00:57:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一根弦,像:

str = "pwd.getpwuid(1000)"

现在,如果我尝试eval(),它可能会引发一个异常,因为我还没有导入pwd(或者可能没有导入pwd)。你知道吗

所以我决定编写一个解析器:在“.”上拆分字符串并得到一个列表:

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

然后取lis[0],如果它不包含我调用的"("")"

importlib.import_module(lis[0])

然后是评估。你知道吗

我能把同样的事情做得更好吗?你知道吗


Tags: 字符串import解析器列表evalpwdimportlib事情
2条回答

用正则表达式拆分lis[2]中函数的positional参数和lis[3]中的named参数如何

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

找到了解决方案:

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

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

这个的eval()没问题!你知道吗

(lambda或def明显相同)

相关问题 更多 >