Как отловить повышенное исключение в рейке - PullRequest
0 голосов
/ 23 января 2019

У меня есть задача rake, которая перебирает строки в файле CSV, и внутри этого цикла есть блок begin / rescue, чтобы перехватить любое возможное возбужденное исключение. Но когда я запускаю его, он продолжает говорить «грабли прерваны!» и он не входит в спасательный блок

CSV.foreach(path, :headers => true) do |row|
  id = row.to_hash['id'].to_i
  if id.present?
    begin
      # call to mymethod
    rescue => ex
      puts "#{ex} error executing task"
    end
  end
end
...
def mymethod(...)
  ...
  begin
    response = RestClient.post(...)
  rescue => ex
    raise Exception.new('...')
  end
end

Ожидается: он должен завершить цикл всех строк CSV

Фактический результат: останавливается после достижения исключения «рейз», говоря, что:

грабли прерваны!

Исключение: сообщение об ошибке здесь

...

Причина:

RestClient :: InternalServerError: 500 Внутренняя ошибка сервера

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Я решил эту проблему, просто закомментировав строку, которая вызывает исключение, потому что кажется, что это самое быстрое решение на данный момент.

# raise Exception.new('...')

Я все еще открыт для других предложений, если есть более эффективные способы сделать это.

0 голосов
/ 23 января 2019

Вы можете использовать next, чтобы пропустить ошибочный шаг цикла:

CSV.foreach(path, :headers => true) do |row|
  id = row.to_hash['id'].to_i
  if id.present?
    begin
      method_which_doing_the_staff
    rescue SomethingException
      next
    end
  end
end

И поднять исключение внутри вашего метода:

def method_which_doing_the_staff
  stuff
  ...
  raise SomethingException.new('hasd')
end
...