Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t PyRun_字符串是否计算布尔文本? 我需要从C++中评估Python表达式。此代码似乎有效: PyObject * dict = PyDict_New(); PyObject * val = PyRun_String(expression, Py_eval_input, dict, 0); Py_DECREF(dict);_Python_Boolean_Cpython - Fatal编程技术网

为什么';t PyRun_字符串是否计算布尔文本? 我需要从C++中评估Python表达式。此代码似乎有效: PyObject * dict = PyDict_New(); PyObject * val = PyRun_String(expression, Py_eval_input, dict, 0); Py_DECREF(dict);

为什么';t PyRun_字符串是否计算布尔文本? 我需要从C++中评估Python表达式。此代码似乎有效: PyObject * dict = PyDict_New(); PyObject * val = PyRun_String(expression, Py_eval_input, dict, 0); Py_DECREF(dict);,python,boolean,cpython,Python,Boolean,Cpython,不幸的是,如果表达式为“False”的“True”(即val为0,PyErr_occurrent()返回True),那么它会失败得很厉害。我做错了什么?他们不应该分别评估Py_True和Py_False吗 PyObject* PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals); 如果您想要True和False,它们必须在传递给解释器的*globalsdict中。您可以通过调用PyEval\u

不幸的是,如果表达式为“False”的“True”(即val为0,PyErr_occurrent()返回True),那么它会失败得很厉害。我做错了什么?他们不应该分别评估Py_True和Py_False吗

PyObject* PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals);
如果您想要True和False,它们必须在传递给解释器的
*globals
dict中。您可以通过调用
PyEval\u GetBuiltins
来解决这个问题

来自Python 2.6源代码:

if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
    if (PyDict_SetItemString(globals, "__builtins__",
                 PyEval_GetBuiltins()) != 0)
        return NULL;
}
如果这不起作用,您可以尝试在调用
PyRun\u字符串(“导入”\uuuu内置”\uuuuu作为”\uuuu内置”\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


您可能会注意到Python交互式解释器总是运行
\uuuuu main\uuuuuu
模块中的代码,我们在这里没有创建这些模块。我不知道你是否需要一个
\uuuuu main\uuuuuu
模块,除了有很多脚本包含
if\uuuu name\uuuuu=“\uuuuuu main\uuuuu”
失败后调用PyErr\u Print()时会显示什么?我知道,我以前应该这样做,但我不能在我的应用程序中调用PyErr\u Print(),原因有很多。无论如何,我在一个单独的文件中复制了这个,这就是我得到的:NameError:name'False'没有定义!!看起来此文字在C中不可用!既然这回答了你的问题,你应该把它作为一个答案发布。哇,我从来没有意识到,真的,假的,甚至没有一个是内置模块的一部分。。。第一个解决方案为我做到了,谢谢你为我指明了正确的方向!我在这里找到了更多信息: