11

官方文档没有具体说明。我理解 EOFError 的意思是“文件结束错误”,但这到底是什么意思?如果文件阅读器到达文件的末尾,那对我来说听起来不像是错误。

4

2 回答 2

17

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
于 2009-08-13T15:29:03.487 回答
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
于 2009-08-13T14:57:44.510 回答