我在调用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代码中捕获错误和异常吗?
答案 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
是二元运算符,并且您没有为此提供左参数。