2017-05-28 17 views
0

コード:にSyntaxError:印刷はevalの中では動作しません()

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 

私が間違って何をしているのですか?

+1

あなたのPythonバージョンは何ですか? – gzc

+0

Python-2.xの 'SyntaxError'をスローすると仮定します。 Python 2の 'print'のようなステートメントには' exec'が必要です。 – MSeifert

+0

w.r.t.重複:私はこれを開いたままにする投票をしています。潜在的な重複は 'print'を特に言及していないので、現在の質問を開いたままにしておくインターネット検索クエリに関しては助けになります。 – kfx

答えて

2

printは、Python 2の演算子であり、Python 3の関数です。どのバージョンを使用していますか?

+0

^これは本質的に正解です。 'eval'は式だけで動作します。 Python 3では 'print'は関数なので、その使用は有効な式です。 Python 2では、その使用は式ではなく文であるため、評価されません。詳細については、https://stackoverflow.com/questions/22558548/eval-syntaxerror-invalid-syntax-in-pythonを参照してください。 – daveruinseverything

+0

「どのバージョンを使用していますか」という部分を削除し、その理由がPython -2.xではさらに良い答えになります。 – MSeifert

+0

Python 2を使用しているので、exec()を実行しますか? –

1

evalは、式ではなく、ステートメントを評価し、あなたはそれをprint機能、ないprint声明を渡す必要があります。デフォルトでは、printはPython 2のステートメントであり、printステートメントはPython 3には存在しません。ただし、printファンクションは、__future__インポートを介してPython 2の最新バージョンで利用できるです。 print関数は実際にPython 2のこれらのバージョンで定義されていますが、printステートメントでマスクされています。インポートによってprintステートメントが使用できなくなり、print関数が公開されます。 Pythonの2.6.6でテスト

デモ、:

foobar 

ところで

from __future__ import print_function 

eval("print('foobar')")  

出力は、それが一般的にないない限りevalまたはexecを、使用することをお勧めしますあなたには選択肢がありません。それらは比較的遅く、評価されていない文字列を評価/実行するとセキュリティリスクが発生します。詳細はSOベテランNed BatchelderのEval really is dangerousを参照してください。単純なPythonリテラルを評価するには、ast.literal_evalを使用できます。

関連する問題