2015-03-27 9 views
6

Betrachten Sie eine Rack App. Ich will nur den Fehler behandeln, wenn wir nicht einen Test ausgeführt wird:Ist es möglich, Rettung mit einer bedingten verwenden?

begin 
    do_something 

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

Dies erzeugt syntax error, unexpected keyword_rescue (SyntaxError) rescue => error

Gibt es eine Möglichkeit, dies zu tun?

Antwort

7

Könnten Sie so etwas tun?

begin 
    do_something 

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

Dies würde die Ausnahme erneut auslösen, wenn Sie nicht testen.

EDIT

Wie @Max weist darauf hin, können Sie mit diesem etwas prägnanter sein.

begin 
    do_something 

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

    handle_error error 
end 
+0

so einfach war. –

+2

Wenn Sie eine Ausnahme innerhalb einer Rettung erneut auslösen, müssen Sie kein Argument übergeben: 'raise wenn ENV [" RACK_ENV "] ==" test "; handle_error error' – Max

+0

Das Problem hier ist, dass es den Ort des Fehlers ändert. – baash05

1

Man kann immer es rettet dann dann entweder umgehen oder rethrow je nach Kondition

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