2009-08-11 68 views
2

我有这样的事情:无法捕捉异常,在Ruby中

class Vehicle 

    def self.set_color(input) 
    if %w{blue red green}.include?(input) 
     input 
    else 
     raise "Bad color" 
    end 
    end 

end 

class Car < Vehicle 

    def make_car 
     begin 
     my_color = Vehicle.set_color("orange") 
     rescue 
     puts "you screwed the pooch" 
     end 
    end 

end 

class CarTest < Test::Unit::TestCase 
    def test_number_one 
    c = Car.new 
    c.make_car 
    end 
end 

但由于某些原因,我的测试是提高异常并停止执行,而不是抓住它和输出的“你搞砸了的狗。”任何想法为什么发生这种情况,以及如何解决它?

谢谢!

+0

请问如果你'TestCase的外c.make_car'出现这种情况?它输出“你搞砸了这只狗”,因为它对我来说应该是这样.. – dbr 2009-08-11 01:34:37

回答

11

没有争论的营救不是对例外情况的“全面覆盖”。

如果你只是发出一个“救援”,它将只拯救一个StandardError异常(它将捕获RuntimeError < StandardError),但不是一个异常。

如果你真的想赶上一切,你应该做一个


rescue Exception 
+1

你应该很少做什么:http://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-rescue-exception-e-in-ruby – cbmanica 2014-01-09 17:59:04

0

我99%确定“in”是ruby中的受保护关键字。尝试使用不同的变量名称。

+0

就是这样;对于我在some_collection(...) – 2009-08-11 00:28:57

+0

上面的代码不是确切的代码,只是一些足够简单的证明这个想法。我没有在实际的程序中使用“in”,所以这不是问题。我编辑的帖子,以反映 – Tony 2009-08-11 01:15:56