在救援声明中包装每个命令

chi*_*org 2 ruby selenium exception-handling

我有10个Ruby函数调用我想执行,每次调用都可能抛出异常.我想以同样的方式处理每个异常并继续.有没有办法做到这一点没有包装的每一行begin... rescue... end阻止?

[编辑]:用例是一个屏幕抓取器/自动化工具,它使用Selenium Web驱动程序填写表单.我不想打扰检查select元素中的选项是否存在,只是尽可能地填写它们.为此,我需要调用Selenium::WebDriver::Support::Select.select_by并继续,如果它抛出"无法找到值为x的选项"异常.

chi*_*org 6

我发现这个答案也符合我的要求:

def action
    yield
    rescue
        ....
    ensure
        ....
end

action { call1 }
action { call2 }
action { call3 }
Run Code Online (Sandbox Code Playgroud)


nur*_*tin 5

你的意思是这样的?

class Wtf
  def f1
    raise "f1"
  end
  def f2
    raise "f2"
  end
end

obj= Wtf.new

[:f1, :f2].each do |f|
  begin
    obj.send f
  rescue Exception=> e
    p e
  end
end
Run Code Online (Sandbox Code Playgroud)

编辑:为示例添加了更多代码