python执行字符串



使用python(我使用2.4和2.7),我需要"执行"像这样的字符串语句:对于这些预先存在的全局字符串例如a, b

a="1"
b="2"
from the interactive shell :
exec(if (a < b) :n c=3)
^
SyntaxError: invalid syntax

this适用于整个语句的双引号:执行("if (a <)B):n c=3")

因为我需要从C api调用python函数来执行修改全局变量的语句(如果我理解正确的话,这不能用eval完成)如果我将语句赋值给要执行的字符串,它会交互式地工作:

>>> mystr="if (a < b) :n c=3"
>>> exec(mystr)

如果所有全局变量都存在,它会工作,从C api调用,回溯给出错误"期望字符串或unicode对象,found tuple"根据我的理解,所有需要的全局变量都存在

要执行的字符串应该怎么写?

如果我尝试嵌套2执行,它似乎反而工作交互和从C api与PyObject_CallFunction, PyObject_CallFunctionObjArgs:

>>> mystr1="exec(if (a < b) :n c=3), globals())"
>>> exec(mystr1)

从python得到解释的行,我使用:

if ( PyErr_Occurred() ) 
{
PyObject *ptype, *pvalue, *ptraceback;
PyErr_Fetch(&ptype, &pvalue, &ptraceback);

//Get error message
char *pStrErrorMessage =NULL;
if(pvalue)
{
PyObject *pstr=PyObject_Str(pvalue);
pStrErrorMessage = PyString_AsString(pstr);
}

exec期望一个字符串,而不是Python字面量

>>> a = 1
>>> b = 2
>>> exec("if (a < b) :n c=3")
>>> c
3

eval也可以使用不同的结构,但您可能需要向它传递全局变量或局部变量,以便它在函数中工作(对shell具有不同的作用域)

https://docs.python.org/2.7/library/functions.html eval

>>> if eval("a + b", globals()) == 3:  # NOTE does not need globals in shell
...     c = 5
...
>>> c
5

最新更新