Ruby文件I / O中的EOFError是什么?

时间:2009-08-13 14:41:48

标签: ruby file-io eoferror

official documentation未指定。我理解EOFError的意思是“文件结束错误”,但究竟是什么意思呢?如果文件阅读器到达文件的末尾,那对我来说听起来不是一个错误。

2 个答案:

答案 0 :(得分:13)

EOFError在所有IO中都很方便,这个类是ruby中所有输入/输出的基础。现在还要记住核心的Unix概念:一切都是文件。这包括套接字。因此,如果您打开一个套接字并正在读取它,则异常情况可能是遇到文件结尾。

那里的所有例子都显示了EOFError的琐碎用法(在阅读一些文本文件时),这些用法并不实用。但是,开始挖掘net / http或其他大量使用套接字的类,你会看到使用这个异常。

编辑从net / ftp

添加此示例
def getline
  line = @sock.readline # if get EOF, raise EOFError
  line.sub!(/(\r\n|\n|\r)\z/n, "")
  if @debug_mode
    print "get: ", sanitize(line), "\n"
  end
  return line
end

答案 1 :(得分:9)

当您尝试对已经引用文件末尾的文件对象执行操作时,将引发EOFError(文件结束错误)。在此示例中,当行不存在时,我们尝试readline

例如:

import_file = File.open(filename)
begin
  while (line = import_file.readline)
    sline = FasterCSV.parse_line(line)
    # Do stuff with sline
  end
rescue EOFError
  # Finished processing the file
end

没有EOFError可以实现同样的目标:

File.open(filename).each do |line|
    sline = FasterCSV.parse_line(line)
    # Do stuff with sline        
end