У меня есть утверждение, которое терпит неудачу:
result = service.load_data()
Теперь следующее подавляет ошибку, и я могу проверить nil
result = service.load_data() rescue nil
Но когда я делаю следующее, первоначальная ошибка возникает прямо в пользовательском интерфейсе, и я не получаю details
исключения.
begin
result = service.load_data()
rescue => details
logger.fatal "Failed to load the data: #{details}"
end
Я уверен, что есть глупая деталь, которую я должен упустить, но я не могу найти здесь проблему. Так почему же не вызывается блок rescue
?
Обновление: я получил следующее сообщение об ошибке:
getaddrinfo: nodename nor servname provided, or not known
getaddrinfo: nodename nor servname provided, or not known
(я обновил свой ответ) - person Besi   schedule 24.04.2013SocketError
- person Lee Jarvis   schedule 24.04.2013rescue
без класса по умолчанию будетStandardError
, если ваш класс исключений не наследуется от него, произойдет сбой. Вам может понадобитьсяrescue Exception
или указать классы более конкретно. Тем не менее, если это /is/SocketError, это наследуется от StandardError, поэтому ваш код должен работать как есть. - person Lee Jarvis   schedule 24.04.2013rescue
в конце строки в этом случае улавливает исключение, но при использовании в качестве блока это не так, если вы не укажете тип исключения. - person Besi   schedule 25.04.2013