将异常处理作为Ruby中的常用方法

sam*_*207 12 ruby exception-handling

有人能告诉我有没有办法将异常处理作为常用方法并在方法中使用?让我进一步解释一下.

例如,我有以下方法

def add(num1, num2)
 begin
   num1 + num2
 rescue Exception => e
   raise e
 end 
end

def divide(num1, num2)
 begin
   num1 / num2
 rescue Exception => e
   raise e
 end 
end 
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,即使我的方法只需要一行,由于异常处理代码,该方法变得更大.

我正在寻找的是更轻薄的解决方案(只是一个想法)

def add(num1, num2)
  num1 + num2 unless raise_exception
end

def divide(num1, num2)
 num1 / num2 unless raise_exception
end  

def raise_exception
  raise self.Exception
end
Run Code Online (Sandbox Code Playgroud)

请注意上面的代码不起作用,只是我的想法.这可能还是有其他好方法吗?

Dav*_*vid 13

def handle_exception(&block)
  yield
rescue Exception => e
  raise e
end

def add(num1, num2)
  handle_exception { num1 + num2 }
end

def divide(num1, num2)
  handle_exception { num1 / num2 }
end
Run Code Online (Sandbox Code Playgroud)


Vla*_*ich 5

是的,像这样:

 def try
    yield
  rescue Exception => e
    puts 'I`m rescued'
  end

  def devide(num1, num2)
   try { num1/num2 }
  end

ruby-1.9.2-p180 :013 > devide(5,1)
 => 5 
ruby-1.9.2-p180 :014 > devide(5,0)
I`m rescued
 => nil 
Run Code Online (Sandbox Code Playgroud)