在ruby脚本中收集异常

时间:2013-09-27 11:38:05

标签: ruby arrays

我正在编写一个从各种网址收集数据的脚本。我希望将begin rescue块中的错误收集到一个数组中,以便在程序以详细模式运行时输出它们。正常使用时,将忽略失败的连接,脚本将移至下一个URL。

我认为最好的方法是在脚本顶部创建一个数组errArray = Array.new来保存错误,然后执行:

rescue Exception => e
  errArray << e.message

在各种函数中记录错误。 die函数使用p输出数组,除非它是空的。但是,我收到了错误

Undefined local variable or method 'errArray'

任何帮助(和建设性批评)都表示赞赏。

编辑:死亡功能:

def die(e)
  p errorArray unless errorArray.empty?
# Some other irrelevant code
end

1 个答案:

答案 0 :(得分:4)

errArray不是全局变量,因此方法无法访问它。您可以通过$err_array将其声明为全局变量。

然而,最好的解决方案是创建一个简单的类:

class ExceptionCollector

  def collect
    yield
  rescue => e
    errors << e.message
  end

  def errors
    @errors ||= []
  end
end

然后很简单:

$logger = ExceptionCollector.new

$logger.collect do
  # this may raise an exception
end

def foo
  $logger.collect do
    # another exception
  end
end

$logger.errors    #=> list of errors