Как проверить конкретное условие спасения для обработки ошибок в Rails 3.x? - PullRequest
8 голосов
/ 30 ноября 2011

У меня есть следующий код:

begin
  site = RedirectFollower.new(url).resolve
rescue => e
  puts e.to_s
  return false
end

, который выдает такие ошибки, как:

the scheme http does not accept registry part: www.officedepot.com;

the scheme http does not accept registry part: ww2.google.com/something;

Operation timed out - connect(2)

Как добавить другое спасение для всех ошибок, подобных the scheme http does not accept registry part?

Поскольку я хочу сделать что-то другое, чем просто распечатать ошибку и вернуть falseв этом случае.

Ответы [ 3 ]

14 голосов
/ 30 ноября 2011

Это зависит.

Я вижу три описания исключений. Различаются ли типы исключений?

Если бы Вы могли написать свой код так:

begin
  site = RedirectFollower.new(url).resolve
rescue ExceptionType1 => e
  #do something with exception that throws 'scheme http does not...'
else
  #do something with other exceptions
end

Если типы исключений одинаковы, то у вас все равно будет один спасательный блок, но он решит, что делать на основе регулярного выражения. Возможно что-то вроде:

begin
  site = RedirectFollower.new(url).resolve
rescue Exception => e
  if e.message =~ /the scheme http does not accept registry part/
      #do something with it
  end
end

Помогает ли это?

6 голосов
/ 30 ноября 2011

Проверьте, что такое класс исключений в случае «схема http не принимает часть реестра» (вы можете сделать это с помощью puts e.class).Я предполагаю, что это будет не «Тайм-аут операции - connect (2)»

затем:

begin
  .
rescue YourExceptionClass => e
  .
rescue => e
  .
end
1 голос
/ 11 октября 2017

Важное примечание: Rescue with wildcard, по умолчанию используется StandardError. Это не спасет каждую ошибку.

Например, SignalException: SIGTERM не будет спасено с rescue => error. Вам придется специально использовать rescue SignalException => e.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...