是否可以在有条件的情况下使用救援?

Is it possible to use rescue with a conditional?

考虑一个 Rack 应用程序。如果我们不是 运行 测试,我只想处理错误:

begin
  do_something

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

这会生成 syntax error, unexpected keyword_rescue (SyntaxError) rescue => error

有办法吗?

你能做这样的事情吗?

begin
  do_something

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

如果您不在测试,这将重新抛出异常。

编辑

正如@Max 指出的那样,您可以更简洁一些。

begin
  do_something

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

  handle_error error
end

你总是可以拯救它,然后根据你的情况处理或重新扔掉

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