web-dev-qa-db-ja.com

Python(python newbie)で "withopen"を使用する場合の構文エラー

[root@234571-app2 git]# ./test.py 
  File "./test.py", line 4
    with open("/home/git/post-receive-email.log",'a') as log_file:
            ^
SyntaxError: invalid syntax

コードは次のようになります。

[root@234571-app2 git]# more test.py 
#!/usr/bin/python
from __future__ import with_statement

with open("/home/git/post-receive-email.log",'a') as log_file:
    log_file.write("hello world")

そして私はPython 2.5.5を使用しています

[root@234571-app2 git]# python -V
Python 2.5.5
13
Tony

あなたが持っているものは正しいはずです。 Python 2.5は、__future__からインポートできるものとしてwithステートメントを導入しました。コードが正しいので、私が考えることができる唯一の説明は、pythonバージョンはあなたが思っているものではありません。システムにpython)の複数のバージョンがインストールされていて、何らかの理由でコードが古いバージョンで実行されている可能性があります。実行してみてくださいこのように:

[root@234571-app2 git]# /usr/bin/python2.5 test.py

これが機能すると仮定して、最初の行を変更して、python)のバージョンを指定できます。これは、python2.5への直接パスにすることも、envコマンドを使用することもできます。ユーザーのPATH変数でpython2.5を検索します。正しいアプローチは、システムのpythonインストールが何であるかによって異なります。2つのアプローチは次のとおりです。

/usr/bin/python2.5を直接使用するには、次のようにします。

#!/usr/bin/python2.5

PATHで最初に発生するpython2.5のバージョンを使用するには、次のようにします。

#!/usr/bin/env python2.5
8
Benson

多分このように?

#!/usr/bin/env python2.5
from __future__ import with_statement

with open("/home/git/post-receive-email.log",'a') as log_file:
    log_file.write("hello world")
3
Krumelur

この質問への答えは、OPのコメントに埋もれています。 @Tonyが自分のコードが2.4で実行されていることを確認すると、@ Tamasは上記の正しい解決策を示しました。

「つまり、/usr/local/bin/pythonは2.5.5ですが、スクリプトを/usr/bin/python(2.4.3)で呼び出しています。ShellShebang行を#!/usr/bin/env pythonに置き換えてみてください。」

一般に、パス(/usr/bin/usr/local/binなど)のハードコーディングには注意してください。これが、envコマンドが発明された理由です。これは、システムに複数のバージョンのPythonがインストールされている場合に特に関係があります。

ただし、OPコードは2.5以降のインタプリタで実行されるため、古いPythonの問題でした。構文エラーは、=のバージョンに関係なくこのメッセージを表示します。 Pythonあなた考えるあなたが使用しています。

1
wescpy