在Python中使用"with open"时的语法错误(Python新手)

14 投票
3 回答
43895 浏览
提问于 2025-04-15 21:53
[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 个回答

1

这个问题的答案其实在提问者的评论里。@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。

5

可能像这样?

#!/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")
8

你现在的代码应该是正确的。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

撰写回答