在红宝石中无法捕获异常

And*_*sov 4 ruby exception

class Collector
  class ContentNotFound < Exception
  end

  class DuplicateContent < Exception
  end
end

begin
  raise Collector::ContentNotFound.new
rescue
  puts "catch"
end
Run Code Online (Sandbox Code Playgroud)

当我运行脚本时,我没有收到"catch"消息,我看到错误:

lib/collector/exception.rb:10:in `<main>': Collector::ContentNotFound (Collector::ContentNotFound)
Run Code Online (Sandbox Code Playgroud)

为什么?如果不在救援中输入他们的课程,我怎么能抓住我的例外?

Jac*_*cob 12

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

rescue Exception
Run Code Online (Sandbox Code Playgroud)

bare rescue关键字只捕获衍生物StandardError(有充分理由).

但是,更好的解决方案是让您的自定义异常派生自StandardError.

有关为何如此的解释,请参阅PickAxe的此部分.