2012-02-11 108 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