【发布时间】:2017-04-02 15:40:52
【问题描述】:
我需要一个本地扩展,它在我的文件系统中,但与我当前的系统不兼容。在这种情况下,我想在 ruby 中做出反应并使用模拟实现,但是这段代码
begin
require 'dotstar'
rescue LoadError
puts "Got LoadError"
require 'dotstarsimulator'
rescue
puts "Warning: could not open dotstar native support => using sim"
require 'dotstarsimulator'
end
直接崩溃而不调用我的救援代码。
irb 会话也是如此,我只是尝试require 'dotstar'。
【问题讨论】:
-
在 OS X 中观察到此行为。
-
您的问题不清楚:您只能
rescue和Exception即raised。如果它“简单地崩溃”,那么你不能从中rescue。如果它是raises 和Exception,那么你可以从Exception得到rescue。 -
查看 ruby mri 源代码后,我发现这是/曾经是 osx 特定的行为。对于现代版本的 osx,它被固定为:bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/…。请参阅相应的错误报告:bugs.ruby-lang.org/issues/12956。从技术上讲,接受的答案以及@jör 的评论是正确的。
标签: ruby exception exception-handling