eval("print('foobar')")
輸出:
Traceback (most recent call last):
File "Untitled.py", line 30, in <module>
eval("print('foobar')")
File "<string>", line 1
print('foobar')
^
SyntaxError: invalid syntax
我在做什麼錯?
eval("print('foobar')")
輸出:
Traceback (most recent call last):
File "Untitled.py", line 30, in <module>
eval("print('foobar')")
File "<string>", line 1
print('foobar')
^
SyntaxError: invalid syntax
我在做什麼錯?
您必須使用exec函數。就像這樣:
exec("print('foobar')")
更多信息,請參見What is the difference between an expression and a statement in Python? 。
print
是Python 2中的運算符,也是Python 3中的函數。您使用哪個版本?
^這實際上是正確的答案。 'eval'僅適用於表達式。在Python 3中,'print'是一個函數,因此它的使用是一個有效的表達式。在Python 2中,它的使用是一個聲明,而不是表達式,所以它不會評估。請參閱https://stackoverflow.com/questions/22558548/eval-syntaxerror-invalid-syntax-in-python以獲取更多信息 – daveruinseverything
如果您刪除了「您使用的是哪個版本」部分,並說這就是爲什麼它在python上失敗的原因-2.x這將是一個更好的答案。 – MSeifert
使用Python 2,所以我想exec()呢?具有很大的意義,謝謝 –
eval
計算表達式,而不是語句,所以你需要通過它的print
功能,而不是print
聲明。默認情況下,print
是Python 2中的語句,並且Python 3中不存在print
語句。但是,print
函數是,可通過__future__
導入在Python 2的最新版本中使用。 print
函數實際上是在Python 2的這些版本中定義的,但它被print
語句掩蓋;導入使得print
語句不可用,從而暴露了print
函數。
演示,關於Python 2.6.6測試:
from __future__ import print_function
eval("print('foobar')")
輸出
foobar
順便說一句,它一般不的使用eval
或exec
,除非是個好主意你別無選擇。它們相對較慢,並且如果您將它們傳遞給unsanitized字符串以評估/執行,則存在安全風險。詳情請參閱SO資深人士Ned Batchelder的Eval really is dangerous。要評估簡單的Python文字,你可以使用ast.literal_eval
。
你的python版本是什麼? – gzc
鑑於它拋出一個'SyntaxError',它是python-2.x。在python 2中,你需要用'exec'來表示像'print'這樣的語句。 – MSeifert
w.r.t.重複項目:我正在投票表決將此事件公開。潛在的副本沒有具體提及'print',因此就互聯網搜索查詢而言,將當前問題打開會有所幫助。 – kfx