异常处理基本就是 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
- 使用护卫方法(较少使用)
使用状态替代异常,根据状态码统一处理。需要使用子进程处理可抛异常逻辑,根据子进程返回码判断状态
网友评论