所以我有一个程序写了很多文本文件:
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")
仍然抛出一个不应该是错误的随机错误?这是记忆问题吗?
答案 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
查看代码,了解该行之前或之前的内容。