【问题标题】:Is there a case where a ruby "exception" would get through 'rescue Object'?是否存在红宝石“异常”会通过“救援对象”的情况?
【发布时间】:2009-05-06 21:55:01
【问题描述】:

有什么方法可以引发不源于 Exception 的异常吗?

我试图避免的是:

require 'timeout'
begin
  timeout(1) {sleep(50)}
rescue StandardError => e
  puts e.message
end

我知道我可以使用“rescue Exception”或更彻底的“rescue Object”来捕捉它,但这对我来说似乎有点奇怪。

【问题讨论】:

  • 我假设您知道 StandardError 源自 Exception,并且该异常没有被拯救,而 StandardError 及其后代是,对吧?您的问题并不完全清楚。
  • 是的,我只需要一个可以通过救援冒泡的异常示例。正如你所说,如果你给它一些不是来自异常的东西,就会引发呕吐。这是引发异常的唯一方法吗?通过 C API 引发的任何东西是否具有相同的限制(再次,我假设您可以从那里引发异常)
  • 我不知道 C API,但我只是假设如果有人设法通过 API 做一些 ruby​​ 本身不允许的事情,这是对 API 的不恰当使用(也许API 本身的错误)。所以,太假设了。我就让它过去吧。
  • 我猜对我来说已经足够好了!
  • 一些聪明的 alec 可以尝试在 Ruby 1.9 中提高 BasicObject

标签: ruby exception


【解决方案1】:

如果您尝试引发不属于 Exception 类的错误,您将收到 <TypeError: exception class/object expected>

【讨论】:

  • 谢谢!我收到此错误是因为我执行了raise prefix, "my error msg" 而不是raise prefix + "my error msg",其中prefix 是一个字符串。哎呀。固定的! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
  • 2018-11-17
  • 2021-10-24
  • 2013-06-23
相关资源
最近更新 更多