[Ruby] exception

Dennis Vshivkov walrus на amur.ru
Чт Июн 21 12:54:05 MSD 2007


On Thu, Jun 21, 2007 at 12:29:39PM +0400, Timur Batyrshin wrote:

 > А можно как-нибудь вернуться из обработки эксепшна в ту же
 > точку, где он возник?

    Нельзя. Не имеет логического смысла.

 > Допустим, есть у меня код:

 > begin
 >   IO.readlines(file).each do |s|
 >     storage.add(s) # => AddException
 >   end
 > rescue AddException
 >   # выдать ошибку о неправильном формате и продолжить обработку
 > rescue => err
 >   puts err
 > end

 > Как сделать, чтобы на AddException происходил возврат в
 > точку, где он возник,

    Никак.

 > чтобы можно было выполнить next ?

    Выполнить next -- можно.

 > Насколько я понял, retry здесь не подойдет, т.к. тогда весь
 > цикл заново будет отрабатывать.

    А retry и не нужно. Достаточно обработать исключение.

 > Пока разбил эту конструкцию на два захода

 > begin
 >   lines=IO.readlines(file)
 > rescue
 >   ...
 > end

 > .. и 

 > lines.each do |s|
 >   begin
 >     storage.add(s) if s
 >   rescue
 >     ....
 >     s=nil
 >     retry
 >   end
 > end

 > Но может как-то элегантней это сделать можно?..

    Конечно:

begin
  File.foreach(file) { |s|
    begin
      storage.add s
    rescue AddException
      $stderr.puts $!
    end
  }

rescue
  $stderr.puts $!
end

-- 
/Awesome Walrus <walrus на amur.ru>
                   ...Стремиться к веселью и любить смеяться -- это болезнь...


Подробная информация о списке рассылки Ruby