Ошибка синтаксиса при использовании "с открытым" в Python (новичок в python)

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

Код выглядит следующим образом:

[[email protected] 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

[[email protected] git]# python -V
Python 2.5.5

Ответы

Ответ 1

Что у вас должно быть правильно. Python 2.5 представил инструкцию WITH как что-то, что вы можете импортировать из __future__. Поскольку ваш код верен, единственное объяснение, о котором я могу думать, это то, что ваша версия python - это не то, что вы думаете. Там есть хорошая вероятность, что у вас есть несколько версий python, установленных в системе, и по какой-то причине ваш код работает со старой версией. Попробуйте запустить его следующим образом:

[[email protected] git]# /usr/bin/python2.5 test.py

Предполагая, что это работает, вы можете изменить свою первую строку, чтобы указать, какую версию python вы хотите. Это может быть либо прямой путь к python2.5, либо вы можете использовать команду env для поиска переменной user PATH для python2.5. Правильный подход зависит от того, что устанавливаются вашими системами python. Вот два подхода:

Чтобы напрямую использовать /usr/bin/python 2.5, вы можете сделать это:

#!/usr/bin/python2.5

Чтобы использовать ту или иную версию python2.5 сначала в вашем PATH, сделайте следующее:

#!/usr/bin/env python2.5

Ответ 2

Может быть, так?

#!/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

ответ на этот вопрос похоронен в комментариях ОП. @Tamas дал правильное решение выше, как только @Tony подтвердил, что его код выполняется 2.4:

"Итак, /usr/local/bin/python - 2.5.5, но вы вызываете свой script с /usr/bin/python, который равен 2.4.3. Попробуйте заменить строку shebang оболочки следующим: #!/usr/bin/env python."

в общем, будьте осторожны с жесткой кодировкой вашего пути, т.е. /usr/bin, /usr/local/bin и т.д. Вот почему была придумана команда env. это особенно актуально, если в вашей системе установлено несколько версий Python.

Тем не менее, было довольно ясно, что это была старая проблема Python, поскольку этот код OP будет выполняться на любом 2.5 и более новом интерпретаторе. эта синтаксическая ошибка выдает это сообщение независимо от того, какую версию Python вы используете.