在红宝石中无法捕获异常

时间:2010-10-10 21:57:55

标签: ruby exception

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 个答案:

答案 0 :(得分:12)

如果您确实希望按原样捕获这些异常,请使用:

rescue Exception

rescue个关键字仅捕获StandardError的衍生物(有充分理由)。

但是,更好的解决方案是让您的自定义例外来自StandardError

有关为何如此的解释,请参阅PickAxe的this section

答案 1 :(得分:3)

请参阅此帖子以获得解释:

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

基本上,你可以做到

class ContentNotFound < RuntimeError
end

捕获它而不必在rescue语句中指定异常类。