[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