猿问

在Python中评估动态生成的语句

我需要动态生成python代码并使用eval()函数执行它。


我想做的是生成一些“导入”和“分配值”。我的意思是,我需要生成此字符串以对其进行评估eval(x)。


x = """

import testContextSummary

import util.testGroupUtils

testDb = [testContextSummary.TestContextSummary, 

          testGroupUtils.testGroupUtils.TestGroupUtils]

""" # x is automatically generated

eval(x)

... use testDb ...

我尝试使用此代码,但是eval()返回无法识别的错误import,因此我尝试了此代码。


x = """

testContextSummary = __import__("testContextSummary")

testGroupUtils = __import__("util.testGroupUtils")

testDb = [testContextSummary.TestContextSummary, 

          testGroupUtils.testGroupUtils.TestGroupUtils]

""" # x is automatically generated


eval(x) # error

我再次遇到错误,不允许执行赋值语句。


有什么方法可以执行动态生成的python脚本,并使用评估结果?


慕雪6442864
浏览 165回答 2
2回答

米琪卡哇伊

您想要exec而不是eval。>>> s = "x = 2">>> exec s>>> x2当然,请不要exec在不受信任的字符串上使用...

偶然的你

这也可能起作用:x = """[        __import__("testContextSummary").TestContextSummary,         __import__("util.testGroupUtils").testGroupUtils.TestGroupUtils]"""testDB=eval(x)
随时随地看视频慕课网APP

相关分类

Python
我要回答