2014-01-28 65 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的代码来查看该行或之前的内容。