2012-02-11 141 views
2

我是一个天生的业余编程新手,尝试在Linux上使用Geany学习Python 3(3.2)。我一直在试图返工Swaroop C H's Python 3 tutorial下面的例子中我的代码如下:Python 3.2 print(end ='')error

#!/usr/bin/env python3 
# Filename: poem.py 

poem = '''\ 
Programming is fun 
When the work is done 
if you wanna make your work also fun: 
    use Python! 
''' 

with open('poem.txt', mode = 'w') as pfile: 
    pfile.write(poem) 

with open('poem.txt', mode = 'r') as pfile: 
    while True: 
     line = pfile.readline() 
     if len(line) == 0: 
      break 
     print(line, end='') 

我不能编译程序。我收到以下我不明白的错误:

SyntaxError: ('invalid syntax', ('poem.py', 19, 24, "  print(line, end='')\n")) 

当他的代码保持不变时,我得到相同的错误。一旦我删除end=' ',它工作正常。如果我忽略它,那么在诗的每一行之间都会打印一条空行。

我会很感激任何帮助/解释。

+4

你确定你在使用Python 3吗?你有没有试过把它作为'python3 poem.py'来运行? – 2012-02-11 19:02:25

+9

顺便说一下,本教程的作者似乎是一个新手(以及一个可怕的诗人:p)。迭代遍历文件行的Pythonic方法是“for pfile in line”。 – 2012-02-11 19:03:46

回答

7

您没有安装Python 3.x,或者没有使用它。这在Python 3.x下运行良好,但是我得到了Python 2.x下的错误。 Shebangs不是一个保证,他们必须被你用来运行脚本的任何东西所尊敬,如果你直接运行解释器,它将被忽略。所以请确保你正在运行Python3。根据你的环境,这可能以不同的方式完成,但在Unix下,尝试python3而不是python(尽管一些发行版如Arch Linux将python映射到Python 3.x和python2到Python 2.x)。

在不同的音符,所有文件都在Python iterables,所以你好得多做:

with open('poem.txt', mode='r') as pfile: 
    for line in pfile: 
     print(line, end='') 

还要注意PEP8提示:

不要使用空格周围的“ ='符号,用于指示关键字参数或默认参数值。

与你的模式参数一样。

+0

为什么不这样做: '在开放行('poem.txt'): print(line,end ='')' – ccpizza 2012-02-11 19:09:53

+2

@ccpizza:''with''语句可以正确关闭文件,所以它比你的例子更有弹性。 – 2012-02-11 19:10:45

+0

谢谢你是对的。我将Geany配置为使用Python 2.更改了设置,这一切都很好。我会牢记你对代码的看法。我还没有弄清楚如何接受答案,但我会尽快做到这一点。 – Disnami 2012-02-11 19:20:47

11

你的文件中包含的Python 3正确的“认领”行:

#!/usr/bin/env python3 

然而,为了这个家当行生效,你必须直接作为运行脚本:

./poem.py 

(您可能必须执行chmod +x poem.py才能使脚本可执行。)

如果您选择明确运行Python解释器:

python poem.py 

那么被运行python会在你的PATH(类型python --version,看看哪一个是)第一个。你仍然可以明确运行Python 3:

python3 poem.py 

这应该适合你。

+0

+1对于主要问题,这是比我更清晰的答案,但我将留下关于手头代码的离题说明。 – 2012-02-11 19:14:28