2009-08-11 5 views
2

에 예외를 잡을 수 없습니다 ". 당신이 개를 나사"나는 이런 식으로 뭔가가 루비

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

을해야합니까? 그것은 나를 위해해야하는 것처럼 "당신이 멍청이를 망쳤다."라고 출력한다. – dbr

답변

11

인수없이 rescue는 예외에 대해 "catch-all"이 아닙니다.

방금 ​​"구조"를 실행하면 Exception이 아닌 StandardError 예외 (RuntimeError < StandardError를 잡을 것임)를 구출합니다.

당신이 정말로 모든를 잡을하려는 경우, 당신은 당신이 테스트 케이스 외부에`c.make_car`을 할 경우 이런 일이 않는


rescue Exception 
+1

반영하기 위하여 포스트를 편집했다 : http://stackoverflow.com/questions/10048173/why-is-it-bad-style-to-rescue-exception-e-in-ruby – cbmanica

0

"in"은 (는) 루비의 보호 된 키워드입니다. 다른 변수 이름을 사용해보십시오.

+0

그것이있다; 내가 some_collection (...)에 대한 –

+0

위의 코드는 아이디어를 보여주기에 충분할만큼 간단한 코드입니다. 나는 실제 프로그램에서 "in"을 사용하지 않으므로 문제가되지 않습니다. 나는 매우 희소하게해야하는 – Tony

관련 문제