Python C API:为什么PyRun_String不评估简单的条件表达式?
PyRun_String("if True: 1\nelse: 0", Py_eval_input, globals, globals);
使用 PyErr_Print() 时出现错误,打印出的内容是:
File "<string>", line 1
if True: 1
^
我哪里做错了?谢谢。
2 个回答
0
确实是这样,但你没有做任何会产生结果或返回值的操作。
看看下面这段代码:
#!/usr/bin/python
def foo():
if True: 1
else: 0
a = foo()
print(a)
变量a不会得到0或1的值,它的值将是'None'。
4
这不是一个条件表达式,而是一个语句。Py_eval_input
的意思是把字符串当作一个完整的表达式来处理。你可能想用Py_single_input
,这样可以把字符串当作一个语句来处理。
这就像在Python代码中,eval
(这是你想要的)和exec
之间的区别。
我假设你实际上想执行的语句会稍微复杂一些,否则使用eval
或exec
就没什么意义了。对于exec
,你需要确保它有一些副作用,这样你才能看到结果,比如把某个值绑定到一个名字上。