Tag: 救援

如何在Ruby中拯救eval?

我试图找出如何解决在Ruby 1.8.6中使用eval()代码时出现的语法错误。 我期望以下的Ruby代码: #!/usr/bin/ruby good_str = "(1+1)" bad_str = "(1+1" # syntax error: missing closing paren begin puts eval(good_str) puts eval(bad_str) rescue => exc puts "RESCUED!" end 运行时产生以下结果: 2 RESCUED! 相反,我得到的是: 2 eval_rescue.rb:8: (eval):1: compile error (SyntaxError) (eval):1: syntax error, unexpected $end, expecting ')' 看来由eval方法引发的SyntaxError正在被eval内的某个地方救起,而没有给我一个自己处理的机会。 任何人都有任何想法如何得到我想要的行为(即,我的'救援'条款从'评估'错误)?

以DRY方式将多个错误类传递给ruby的救援条款

我有一些代码需要在ruby中拯救多种types的exception: begin a = rand if a > 0.5 raise FooException else raise BarException end rescue FooException, BarException puts "rescued!" end 我想要做的是以某种方式存储我想要救援的exceptiontypes列表,并将这些types传递给rescue子句: EXCEPTIONS = [FooException, BarException] 接着: rescue EXCEPTIONS 这甚至是可能的,是否有可能没有一些真正的黑客调用eval ? 我没有希望,因为我看到TypeError: class or module required for rescue clause当我尝试上述的TypeError: class or module required for rescue clause 。

在Rails 4中的rescue_from ActionController :: RoutingError

我有以下错误: ActionController::RoutingError (No route matches [GET] "http://img.dovov.comfavicon.ico") 我想显示错误404页面的链接不存在。 我怎样才能做到这一点?