Не могу поймать исключение в ruby - PullRequest
4 голосов
/ 11 октября 2010
class Collector
  class ContentNotFound < Exception
  end

  class DuplicateContent < Exception
  end
end

begin
  raise Collector::ContentNotFound.new
rescue
  puts "catch"
end

Когда я запускаю скрипт, я не получаю сообщение «catch», вижу ошибку:

lib/collector/exception.rb:10:in `<main>': Collector::ContentNotFound (Collector::ContentNotFound)

Почему? Как я могу поймать мои исключения, не вводя их классы в спасательных?

Ответы [ 2 ]

12 голосов
/ 11 октября 2010

Если вы действительно хотите перехватить эти исключения как есть, используйте:

rescue Exception

Ключевое слово rescue содержит только производные от StandardError (по уважительной причине).

Тем не менее, лучшим решением будет использование пользовательских исключений из StandardError.

Для объяснения, почему это так, см. этот раздел PickAxe.

3 голосов
/ 11 октября 2010

См. Этот пост для объяснения:

https://stackoverflow.com/questions/383229/common-programming-mistakes-for-ruby-developers-to-avoid/2019170#2019170

По сути, вы можете сделать

class ContentNotFound < RuntimeError
end

, чтобы поймать это, не указывая класс исключенияrescue заявление.

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