2009-12-21 23 views
1

我是一個Python初學者,現在它的刻着我出去:簡單的代碼,但無法找到錯誤(PyS60的而不是具體的)

L = [] 
file = urllib.urlopen("http://someurl.com/someText.txt") 
line = file.readline() 
while line != "" : 
    L.append(line) 
    line = file.readline() 
appuifw.selection_list(choices=L) 

,我得到這個錯誤:

line = file.readline() 
^ 
SyntaxError: invalid syntax 

有誰知道這個問題是什麼?

+0

您是否在細緻地用白色空間?是語法錯誤與上一行縮進一致的行​​嗎? – 2009-12-21 20:59:34

+1

也可以,而不是你的while循環,你可以做'對於文件行:' – 2009-12-21 21:00:30

+1

我找不到你的代碼中的任何可見的錯誤,但不使用while循環,在這種情況下。如果你需要一個行列表,只需使用'file.readlines()'。還要注意,如果你需要遍歷一個序列,for循環就是你所需要的(他的語法和語義與C不同) – 2009-12-21 21:04:13

回答

0

似乎在我的Python解釋器(2.6.1)中正常工作。

我把它你做了import urllib第一? (如果不這樣做,將導致NameError,而不是一個SyntaxError。)

編輯:快速谷歌發現這一點:http://discussion.forum.nokia.com/forum/showthread.php?t=150563

這是18個月大,但它聲稱的PyS60是Python的2.2.2。我的機器上沒有這個功能,但如果這是問題,可能值得一看。

+0

是的,我輸入正確的模塊... – Lincoln 2009-12-21 21:04:38

+0

奇怪的一個。也許PyS60不喜歡以字母L開頭的變量名稱。 – 2009-12-21 21:16:44

0

實際上我沒有看到問題,除非您在縮進中混合了製表符和空格,在這種情況下,錯誤應該抱怨縮進級別。但我想我會指出,有讀取一個文件對象的所有行更清潔的方式:

f = urllib.urlopen("http://someurl.com/someText.txt") 
lines = f.readlines() 
appuifw.selection_list(choices=lines) 
+0

也想到了縮進,但似乎沒有問題。 代碼改變爲 線= file.readlines() 在線路L1後 L.append(LI) 仍然相同的錯誤帶有指向在循環中的字線的誤差。 PS:謝謝指出 – Lincoln 2009-12-21 21:04:06

+0

小警告。由於readlines()將所有行復制到內存中,因此對於大型文件或具有性能需求的腳本,該行可能會有問題。 「爲文件行」如何? ( – 2009-12-21 21:05:03

+0

原始代碼是將所有行復制到內存中 – DNS 2009-12-21 21:09:00

0

要覆蓋內置函數file與您變量同名。也許這會導致Py60一些悲傷?

2

重寫

file = urllib.urlopen("http://blabla.com/bla.txt") 
lines1 = file.readlines() 
for li in lines1: 
    L.append(li) 
index = appuifw.selection_list(choices=L) 

似乎現在的工作。
(仍存在問題,但我認爲它是網址)

1

顯示隱形。我敢打賭,隱藏在其中一行中的是非法字符(null是最喜歡的字符),它不會顯示在屏幕上。或者文件的行結束類型可能不正確。

我慣用的伎倆在這裏:

1)你可能在StackOverflow的右鍵入它;嘗試將該代碼複製回源代碼,看看它是否修復了一些問題。有時候很難看出你是否把a)放在了a)或者}的位置。

2)註釋掉所有行,然後取消註釋,直到語法錯誤再次出現。如果在註釋掉所有其他行時出現語法錯誤,那麼它真正的問題在上游。

3)刪除有問題的行及其下方和上方的幾行。在一個操作中刪除這些行;你不想讓壞角色呆在附近,因爲它在兩行之間,一次刪除一行。然後重新鍵入這些行。不要將它們粘貼回去;那可能只是將問題重新粘貼回來。

相關問題