PyRun_String("if True: 1\nelse: 0", Py_eval_input, globals, globals);
返回錯誤與PyErr_Print()打印出:Python C API:爲什麼PyRun_String不評估簡單的條件表達式?
File "<string>", line 1
if True: 1
^
我在做什麼錯? 謝謝。
PyRun_String("if True: 1\nelse: 0", Py_eval_input, globals, globals);
返回錯誤與PyErr_Print()打印出:Python C API:爲什麼PyRun_String不評估簡單的條件表達式?
File "<string>", line 1
if True: 1
^
我在做什麼錯? 謝謝。
這不是一個條件表達式:它是一個語句。 Py_eval_input
表示將字符串視爲單個表達式。您可能希望Py_single_input
將該字符串視爲語句。
這與eval
(這是您要求的)和exec
之間的Python代碼區別是相同的。
我假設你當然希望執行的語句稍微複雜一些,否則使用eval
或exec
的點並不多。對於exec
,您需要確保它有副作用,以便您可以告訴結果,例如通過將某個值綁定到名稱。
確實如此,但是你沒有做任何會產生輸出或返回值的任何事情。
考慮下面的代碼:
#!/usr/bin/python
def foo():
if True: 1
else: 0
a = foo()
print(a)
一個不會得到值爲0或1 - 這將是 '無'。
如果沒有輸出,這將是問題,但不是此特定例外的來源。 – 2011-05-27 09:21:22
我是新來的蟒蛇。我試過「1,如果真的其他0」,它的工作原理。謝謝。 – David 2011-05-27 09:22:24
我想到了一個暗示,但是錯誤地認爲,除非你有一些Python本身的經驗,否則你不會玩C-api。順便說一句,如果你所做的不僅僅是運行一個簡單的表達式或語句,而是考慮使用Cython而不是直接使用C-api。 – Duncan 2011-05-27 09:38:42