是否可以使用有条件的救援?

B S*_*ven 8 ruby rack exception

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

begin
  do_something

  if ENV[ 'RACK_ENV' ] != 'test'
    rescue => error
      handle_error error
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

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

有没有办法做到这一点?

Jus*_*ood 10

你能做这样的事吗?

begin
  do_something

rescue => error
  if ENV["RACK_ENV"] == "test"
    raise error
  else
    handle_error error
  end
end
Run Code Online (Sandbox Code Playgroud)

如果您没有测试,这将重新抛出异常.

编辑

正如@Max指出的那样,你可以对此更简洁一些.

begin
  do_something

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

  handle_error error
end
Run Code Online (Sandbox Code Playgroud)

  • 如果你在救援中重新引发异常,你不需要传递一个参数:`raise if ENV ["RACK_ENV"] =="test"; handle_error错误 (2认同)