在Python中使用"with open"时的语法错误(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
3 个回答
这个问题的答案其实在提问者的评论里。@Tamas 在上面给出了正确的解决方案,当 @Tony 确认他的代码是用 2.4 执行时:
“所以,/usr/local/bin/python
是 2.5.5,但你用 /usr/bin/python
来运行你的脚本,这个是 2.4.3。试试把脚本开头的那一行改成:#!/usr/bin/env python
。”
一般来说,最好不要把路径写死,比如 /usr/bin
、/usr/local/bin
等等。这就是为什么要用 env
命令的原因。当你在系统上安装了多个版本的 Python 时,这一点尤其重要。
不过,很明显这是个旧版 Python 的问题,因为提问者的代码在任何 2.5 及更新的解释器上都能运行。那个语法错误会给出这样的提示,无论你 认为 你使用的是什么版本的 Python。
可能像这样?
#!/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")
你现在的代码应该是正确的。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
如果你想使用 PATH
中第一个找到的 python2.5 版本,可以这样做:
#!/usr/bin/env python2.5