2009-08-11 65 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