无法捕获python EOFError

时间:2012-03-01 08:40:58

标签: python

我读了一个只包含一行的文件。但是,在循环结束之前,我无法停止读取文件。即python不会抛出EOFError异常。我的代码有什么问题?

for x in range(5):
  try:
    line = file.readlines()
  except EOFError:
    break
  print "Line:",line

输出结果为:

Line: ['nice\n']
Line: []
Line: []
Line: []
Line: []

3 个答案:

答案 0 :(得分:6)

readlines()读取整个文档并返回行列表,而不仅仅是一行。

您可能打算使用file.readline() - 但即使这样也不会引发错误,因此您必须执行其他操作,例如检查if not line.endswith("\n"): breaklen(line) < 1以检测EOF。< / p>

就个人而言,我会写相同的功能:

with open("filename") as f:
    for i, line in enumerate(f):
        print("Line: %s" % line)
        if i > 5 or not line:
            break

或者,如果您想要删除额外的换行符,请将print语句更改为:

print("Line: %s" % line.rstrip("\n"))

答案 1 :(得分:2)

file.readlines() 从不提出EOFError

答案 2 :(得分:1)

从文档中说,读取文件将在EOF返回空字符串,而input()和raw_input()将在达到EOF时返回EOFError而不读取任何数据

http://docs.python.org/library/exceptions.html#exceptions.EOFError