Python C API:为什么PyRun_String不评估简单的条件表达式?

2 投票
2 回答
1306 浏览
提问于 2025-04-16 18:27
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之间的区别。

我假设你实际上想执行的语句会稍微复杂一些,否则使用evalexec就没什么意义了。对于exec,你需要确保它有一些副作用,这样你才能看到结果,比如把某个值绑定到一个名字上。

撰写回答