Ruby - Proc.call - 捕获异常

时间:2016-04-20 06:58:55

标签: ruby proc rescue

我在调用Proc object时遇到异常和错误时遇到问题。看我的代码:

def method1
  .. do something ...
end

def method2
.. do something ...
end

def run_method_safely(proc_obj)
  begin
    proc_obj.call
  rescue => e
    puts "Error man!"
    ... do something ...
  end
end

我有很少的方法(这里我只有method1, method2但在代码中我有更多的方法)由方法run_method_safely运行。我这样做是因为我不希望在begin-rescue块中有所有方法,所以我写了一些方法来处理这个问题。参见:

.
run_method_safely(Proc.new { method1 })
run_method_safely(Proc.new { method2 })
.

问题是当proc_obj.call执行时出错(方法丢失,Webdriver - 没有找到这样的元素或其他什么)没有执行救援块,程序运行就像没有发生任何事情

有人知道如何从Proc代码中捕获错误和异常吗?

2 个答案:

答案 0 :(得分:0)

你确定你的样本是正确的吗?

def safe(proc)
  begin
    proc.call
  rescue
    puts "error"
  end
end

def m1
  puts "m1"
  raise
end

def m2
  puts "m2"
end

safe(Proc.new { m1 })
safe(Proc.new { m2 })

打印

m1
error
m2

对我来说。

顺便说一句:你不需要在Proc中包含调用,你可以直接传递Method对象。

safe(method(:m1))

答案 1 :(得分:0)

我认为应该是

Integer

救援的默认设置不是捕获所有错误,而只捕获那些来自rescue Exception => e 的错误。

旁注:我不知道语法

StandardError

有效。 rescue => e 是二元运算符,并且您没有为此提供左参数。