2015-03-27 16 views
6

Rozważ aplikację Rack. Chcę tylko, aby poradzić sobie z błędu, jeśli nie jest uruchomiony test:Czy można użyć ratunku z warunkowym?

begin 
    do_something 

    if ENV[ 'RACK_ENV' ] != 'test' 
    rescue => error 
     handle_error error 
    end 
    end 
end 

Generuje syntax error, unexpected keyword_rescue (SyntaxError) rescue => error

Czy istnieje sposób, aby to zrobić?

Odpowiedz

7

Czy możesz zrobić coś takiego?

begin 
    do_something 

rescue => error 
    if ENV["RACK_ENV"] == "test" 
    raise error 
    else 
    handle_error error 
    end 
end 

To spowoduje ponowne zgłoszenie wyjątku, jeśli nie testujesz.

EDIT

Jak @Max zaznacza, możesz być trochę bardziej zwięzłe z tym.

begin 
    do_something 

rescue => error 
    raise if ENV["RACK_ENV"] == "test" 

    handle_error error 
end 
+0

To było proste. –

+2

Jeśli przenosisz wyjątek do akcji ratunkowej, nie musisz podawać argumentu: 'raise jeśli ENV [" RACK_ENV "] ==" test "; handle_error error' – Max

+0

Problem polega na tym, że zmienia lokalizację błędu. – baash05

1

Zawsze możesz uratować go wtedy wówczas obsługiwać lub przekaż w zależności od stanu

begin 
    do_something 
rescue => error 
    if ENV['RACK_ENV'] != 'test' 
    handle_error error 
    else 
    raise error 
    end 
end 
Powiązane problemy