2009-08-13 1 views

ответ

13

EOFError что удобно во всех IO, класс, который является основой всех ввода/вывода в рубине. Теперь также запомните основные понятия Unix: все это файл. Это включает в себя сокеты. Итак, если у вас есть открытый сокет и читающий его, исключительным условием может быть столкновение с концом файла.

Все примеры показывают тривиальное использование EOFError (при чтении некоторого текстового файла), которые не очень полезны. Однако начните копать через net/http или другие классы, которые сильно используют сокеты, и вы увидите, что это исключение используется.

Edited добавить этот пример из сети/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

+1 Для лучшего ответа. – Swanand

+1

Спасибо Swanand. Я должен использовать пример кода для моего любимого использования find ... "find /usr/lib/ruby/1.8/net/ -name * .rb -exec grep EOFError/dev/null '{}' \;" – 2009-08-13 17:00:40

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 
+1

спасибо за ответ. Я понимаю, что EOFError означает «Конец ошибки файла». но что именно это означает? Если читатель дойдет до конца файла, это не похоже на ошибку. – Tony

+0

Извините, как глупо мне не считать. Я обновил ответ, но, я думаю, он все равно не может ответить на ваш вопрос. – Swanand

+0

, если эти два в значительной степени эквивалентны для обработки файлов, помогает немного. спасибо – Tony

Смежные вопросы