Как я выполняю строку, содержащую код Python в Python?

Официальная документация для проверки модели гласит следующее:

Проверка модели происходит до выполнения действия контроллера.

blockquote>

Поэтому вам необходимо очистить ModelState и вручную запустить проверку, используя код снизу.

if (!model.DifferentShippingAddress)
{
    model.ShippingAddress = model.BillingAddress.ToShipping();
    ModelState.Clear();
    TryValidateModel(model);
}

315
задан SilentGhost 31 March 2009 в 05:14
поделиться

5 ответов

В примере строка выполняется как код с помощью исполнительной функции.

import sys
import StringIO

# create file-like string to capture output
codeOut = StringIO.StringIO()
codeErr = StringIO.StringIO()

code = """
def f(x):
    x = x + 1
    return x

print 'This is my output.'
"""

# capture output and errors
sys.stdout = codeOut
sys.stderr = codeErr

exec code

# restore stdout and stderr
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__

print f(4)

s = codeErr.getvalue()

print "error:\n%s\n" % s

s = codeOut.getvalue()

print "output:\n%s" % s

codeOut.close()
codeErr.close()
63
ответ дан hekevintran 23 November 2019 в 01:06
поделиться

Для операторов использовать exec(string) (Python 2/3) или exec string (Python 2):

>>> mycode = 'print "hello world"'
>>> exec(mycode)
Hello world

При необходимости в значении выражения использовать eval(string):

>>> x = eval("2+2")
>>> x
4

Однако первый шаг должен быть должен спросить себя, если Вы действительно должны. Выполнение кода должно обычно быть положением последней инстанции: это медленно, ужасно и опасно, если это может содержать вводимый пользователями код. Необходимо всегда смотреть на альтернативы сначала, такие как высший порядок функционирует, чтобы видеть, могут ли они лучше удовлетворить потребности.

295
ответ дан Helen 23 November 2019 в 01:06
поделиться

Оценка выезда:

x = 1
print eval('x+1')
->2
3
ответ дан ryeguy 23 November 2019 в 01:06
поделиться

Используйте оценку.

5
ответ дан Pablo Santa Cruz 23 November 2019 в 01:06
поделиться

Наиболее логичное решение должно было бы использовать встроенную оценку (), функция.Another решение состоит в том, чтобы записать, что строка во временный файл Python и выполняет его.

1
ответ дан John T 23 November 2019 в 01:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: