Синтаксическая ошибка при использовании “с открытым” в Python (новичок Python)

[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 21 April 2010 в 17:22
поделиться

3 ответа

То, что у вас есть, должно быть правильным. В Python 2.5 оператор with можно импортировать из __ future __ . Поскольку ваш код правильный, единственное объяснение, которое я могу придумать, это то, что ваша версия python не такая, как вы думаете. Есть большая вероятность, что в системе установлено несколько версий python, и по какой-то причине ваш код работает с более старой версией. Попробуйте запустить его так:

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

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

Чтобы использовать /usr/bin/python2.5 напрямую, вы можете сделать следующее:

#!/usr/bin/python2.5

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

#!/usr/bin/env python2.5
8
ответ дан 2 December 2019 в 00:58
поделиться

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

#!/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
ответ дан 2 December 2019 в 00:58
поделиться

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

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

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

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

1
ответ дан 2 December 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: