2014-01-28 63 views
0

所以我有計劃,有很多寫入到一個文本文件:Python:不是語法錯誤的語法錯誤?

line 395: f = open(filename, "a") 
line 396: f.write("stuff") 
line 397: f.write("more stuff") 

它繼續寫東西約800多f.write行()被調用一遍又一遍

的Ive定期運行腳本來檢查結果,它已經寫入文本文件很好。然而,不加入任何新的代碼,只是更f.writes所有的突然我的Mac終端已經扔那不是真正的語法錯誤語法錯誤:

line 1122 f.write("more stuff") 
     ^SyntaxError: invalid syntax 

其500的文檔使用完全相同的語法該行之前的行。當我評論該行時,控制檯將在下一行中引發語法錯誤。 f.write之前的f有可能只對xyz行數有用嗎?我試圖再次拋出的F聲明(即在代碼中有兩次),就在扔之前:

line 395: f = open(filename, "a") 
line 396: f.write("stuff") 
line 397: f.write("more stuff") 
... ... ... 
line 1110: f = open(filename, "a") 
... 
line 1122: f.write("more stuff") 

還是拋出一個隨機誤差,不應該是一個錯誤?這是一個記憶問題嗎?

+1

...你能告訴我們_actual code_,即剪切和粘貼,從錯誤前的5行到錯誤後的5行? –

+5

給我們看1120和1121行;您可能會錯過1121行的括號。此外,您需要一個循環或其他東西,而不是幾千條几乎相同的行。 – user2357112

+0

檢查您的縮進,也許一些行縮進與選項卡,而其他縮進與空格。 – TwilightSun

回答

1

你幾乎肯定結束行1121錯誤不知何故,和Python解釋器的預期不完全表達要繼續到線1122當無法分析1122作爲1121的延續,是什麼原因造成的語法錯誤,而不是第1122行本身的任何特別錯誤。

另外,「f.write僅適用於xyz行數」並不是真的。證明我寫了下面的測試程序生成器:

import random 
import string 

GENFILE = "testwrite.py" 
HEADER = "with open('testout.txt', 'a') as f:\n" 
BODY = " f.write(\"{}\")\n" 
BODY_N = 100000 

def randstr(n = 1, ch=string.lowercase): 
    return ''.join(random.choice(ch) for i in xrange(n)) 

def main(): 
    with open(GENFILE, 'w') as outf: 
     outf.write(HEADER) 
     for i in xrange(BODY_N): 
      outf.write(BODY.format(randstr(10))) 

if __name__=="__main__": 
    main() 

它創建了一個程序,它看起來像

with open('testout.txt', 'a') as f: 
    f.write("ugakajlxkv") 
    f.write("tskhodwgwr") 
    f.write("vrqcrnxhcz") 
    f.write("yijyqfyjug") 
    f.write("gbsthkkkdc") 
    f.write("vmupgtotoe") 
    # ... 99,994 more lines 

它運行很愉快。

+0

謝謝。這確實是1121行的東西! 1121年發生了大量的括號,這需要一些修正。 – InfinteScroll

+0

就我而言,我在前一行中缺少一個'')......也許更好的編輯器會有所幫助。 –

0

不,它不能是一個內存錯誤,你會得到一段時間的內存異常。我會檢查你沒有一些奇怪的空白字符,立即進行犯規write。查看使用od的代碼來查看該行或之前的內容。