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

时间:2014-01-28 01:56:06

标签: 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.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")

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

2 个答案:

答案 0 :(得分: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

非常开心。

答案 1 :(得分:0)

不,它不能是内存错误,你会得到一段时间的内存异常。我会检查你是否有一些奇怪的空白字符立刻继续犯罪write。使用od查看代码,了解该行之前或之前的内容。