异常处理代码优化

异常处理基本就是 begin/rescue/end的代码块,运用下面三个策略,代码结构就比较清晰。

  • 优先使用顶层异常捕获
def foo
  # 其他逻辑  
  begin
    # 抛出异常的代码
  rescue
    #异常处理
  end
end

# 修改为
def foo
  # 主逻辑
rescue
  # 异常处理
end

# 用受检方法封装异常操作
def filter_through_pipe
  IO.popen(command,'w+') do |process|
    result = begin
      process.write(message)
      process.close_write
      process.read
    rescue Error:EPIPE
      message
    end
  end
end

#修改为

def check_popen(command, mode, error_policy = -> {raise})
  IO.popen(command,mode) do |process|
    return yield(process)
  end
rescue Error::EPIPE
  error_policy.call
end

def filter_through_pipe(command,message)
  checked_popen(command,'w+', -> {message}) do |process|
    process.write(message)
    process.close_write
    process.read
  end
end
  • 使用护卫方法(较少使用)
    使用状态替代异常,根据状态码统一处理。需要使用子进程处理可抛异常逻辑,根据子进程返回码判断状态

你可能感兴趣的:(异常处理代码优化)