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

时间:2011-05-27 08:43:45

标签: python python-c-api

PyRun_String("if True: 1\nelse: 0", Py_eval_input, globals, globals);

在PyErr_Print()打印时返回错误:

File "<string>", line 1
  if True: 1
   ^

我做错了什么? 谢谢。

2 个答案:

答案 0 :(得分:4)

这不是条件表达式:它是一个声明。 Py_eval_input表示将字符串视为单个表达式。您可能希望Py_single_input将字符串视为语句。

这与Python代码在eval(您要求的)和exec之间的区别相同。

我当然假设你实际想要执行的语句稍微复杂一点,否则使用evalexec没有多大意义。对于exec,您需要确保它有副作用,以便您可以告诉结果,例如通过将某个值绑定到名称。

答案 1 :(得分:0)

确实如此,但你没有做任何会产生输出或返回值的事情。

请考虑以下代码:

#!/usr/bin/python

def foo():
    if True: 1
    else: 0

a = foo()

print(a)

a不会得到值0或1 - 它将是'无'。