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

问题描述 投票:0回答:3

考虑一个 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

有办法做到这一点吗?

ruby exception rack
3个回答
16
投票

你能做这样的事吗?

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

3
投票

您可以随时营救它,然后根据您的情况处理或重新扔掉

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

0
投票

你必须提出错误,否则错误会变成

RuntimeError

我的解决方案是

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

  raise error
end
© www.soinside.com 2019 - 2024. All rights reserved.