Ruby 救援模块未捕获异常

Ruby 救援模块未捕获异常,ruby,exception,redis,rescue,Ruby,Exception,Redis,Rescue,问题与radis rbgem有关 我的rescue块没有捕捉到异常,我的应用程序停止运行 我的代码: begin redis = Redis.new puts "WTF?" rescue Exception puts "Exception" end 如果redis关闭,则消息WTF?暴露在外 无论有无异常语句,都会发生这种情况 为什么我的救援小组没有提出这个例外?我自己解决了这个问题(在社区和评论的帮助下) 该异常仅在IRB中发生 原因之一是当IRB尝试打印Redis.new的结

问题与
radis rb
gem有关

我的rescue块没有捕捉到异常,我的应用程序停止运行

我的代码:

begin
  redis = Redis.new 
  puts "WTF?"
rescue Exception
  puts "Exception"
end
如果
redis
关闭,则消息WTF?暴露在外

无论有无异常语句,都会发生这种情况


为什么我的救援小组没有提出这个例外?

我自己解决了这个问题(在社区和评论的帮助下)

该异常仅在IRB中发生

原因之一是当IRB尝试打印
Redis.new
的结果时,IRB的
inspect
调用

在脚本(非IRB)中,不会发生异常,因为
Redis.new
不会在
Redis
服务关闭时引发异常


这有助于解决我的问题。

请@安德鲁:虽然这是真的,但在这种情况下它并没有真正的帮助,因为
Errno::ECONNREFUSED
应该继承自
Exception
(至少如果Gem没有替换它的话…)。当我从答案中读到它时,OP已经尝试了一个简单的
救援
:“它仍然是这样,有/没有例外声明。”@NiklasB。我知道,但从一开始拯救它仍然不是一个好主意(因此这是一个评论)。更相关的一点是,调用
Redis.new
实际上是在异常的堆栈跟踪中吗?那么回溯是什么呢?听起来对Redis.new的调用并不是抛出异常的原因哦,伙计,这真是糟糕的API设计。很高兴你明白了!