Мне нужно динамически генерировать код python и выполнять его с помощью функции eval().Оценка динамически сгенерированных операторов в Python
Что бы я хотел сделать, это сгенерировать некоторые «импорт» и «присваивать значения». Я имею в виду, мне нужно сгенерировать эту строку, чтобы оценить ее. 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 и использовать результат из оценки?
prosseek: Это потому, что 'Exec()' может обрабатывать несколько строк Python, тогда как 'eval()' оценивает только одно выражение. Быть безопасным. – martineau
@martineau: Я не видел исходного комментария, но те же предостережения с 'exec' одинаково применимы к' eval', и это не имеет ничего общего с несколькими строками кода ... ('__import __ ('os'). remove ('important_file') ') – mgilson