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

时间:2013-06-06 00:28:10

标签: python eval

我需要动态生成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脚本,并使用评估结果?

2 个答案:

答案 0 :(得分:2)

您希望exec代替eval

>>> s = "x = 2"
>>> exec s
>>> x
2

当然,请不要在不受信任的字符串上使用exec ...

答案 1 :(得分:0)

这也可能有效:

x = """[
        __import__("testContextSummary").TestContextSummary, 
        __import__("util.testGroupUtils").testGroupUtils.TestGroupUtils]
"""
testDB=eval(x)