官方文档没有具体说明。我理解 EOFError 的意思是“文件结束错误”,但这到底是什么意思?如果文件阅读器到达文件的末尾,那对我来说听起来不像是错误。
问问题
19069 次
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 回答