Ошибка синтаксиса при использовании "с открытым" в 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 вы используете.