Python:不是语法错误的语法错误?

Python:不是语法错误的语法错误?,python,syntax-error,fwrite,Python,Syntax Error,Fwrite,因此,我有一个程序,可以将大量数据写入文本文件: line 395: f = open(filename, "a") line 396: f.write("stuff") line 397: f.write("more stuff") 它继续写东西,大约有800多行f.write()被反复调用 我一直在定期运行纸条来检查结果,它在文本文件中写得很好。然而,没有添加任何新代码,只是更多的f.write突然间我的mac终端抛出了并非真正语法错误的语法错误: line 1122 f.write("m

因此,我有一个程序,可以将大量数据写入文本文件:

line 395: f = open(filename, "a")
line 396: f.write("stuff")
line 397: f.write("more stuff")
它继续写东西,大约有800多行f.write()被反复调用

我一直在定期运行纸条来检查结果,它在文本文件中写得很好。然而,没有添加任何新代码,只是更多的f.write突然间我的mac终端抛出了并非真正语法错误的语法错误:

line 1122 f.write("more stuff")
          ^ SyntaxError: invalid syntax
这与文档在该行之前500多行使用的语法完全相同。当我注释这一行时,控制台将在下一行抛出语法错误。写之前的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")

仍然抛出一个不应该是错误的随机错误?这是内存问题吗?

不,这不可能是内存错误,您可能会在一段时间内出现内存异常。我会检查您是否有一些奇怪的空白字符,并立即继续进行有问题的
编写
。请使用
od
查看代码,查看该行上或之前的内容。

您几乎肯定以某种方式错误地结束了第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

它运行得非常愉快。

。。。你能给我们看一下从错误前5行到错误后5行的实际代码(即剪切和粘贴)吗;您可能错过了第1121行的括号。此外,您需要一个循环或其他东西,而不是数千行几乎相同的行。请检查缩进,可能有些行是用制表符缩进的,而另一些行是用空格缩进的。为什么不在一个写调用中执行此操作呢?您确实需要将所有这些字符串存储在一个容器中(即
list
),并且只使用一个
f.write()
在循环的
中。谢谢。这确实是1121行的东西!1121年出现了很多括号,这需要一些更正。在我的例子中,前一行中缺少了一个
。。。也许一个更好的编辑会有所帮助。