【发布时间】: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。