2015-03-27 24 views
6

Bir Raf uygulamasını düşünün. Biz test yaparken değilse sadece hatayı işlemek istiyorum:Kurtarma şartlı şartlarda kullanmak mümkün mü?

begin 
    do_something 

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

Bu bunu yapmanın bir yolu var mı syntax error, unexpected keyword_rescue (SyntaxError) rescue => error

üretir?

cevap

7

Böyle bir şey yapabilir misiniz?

begin 
    do_something 

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

Test yapmıyorsanız, bu özel durumu yeniden atayacaktır.

DÜZENLEME

@Max işaret ettiği gibi, biraz daha kısa ve öz bununla olabilir.

begin 
    do_something 

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

    handle_error error 
end 
+0

bağlı. –

+2

Kurtarma sırasında bir istisnayı yeniden yükseltirseniz, bir argüman iletmenize gerek yoktur: 'ENV [" RACK_ENV "] ==" test "; handle_error error ' – Max

+0

Burada sorun, hatanın yerini değiştirmesidir. – baash05

1

Hep sonra sonra kurtarması ya işlemek veya rethrow basitti Durumunuz

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