Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ruby脚本中收集异常_Ruby_Arrays - Fatal编程技术网

在ruby脚本中收集异常

在ruby脚本中收集异常,ruby,arrays,Ruby,Arrays,我正在编写一个脚本,从各种url收集数据。我想将begin rescue块中的错误收集到一个数组中,以便在程序以详细模式运行时输出它们。正常使用时,将忽略失败的连接,脚本将移动到下一个url 我认为最好的方法是在脚本顶部创建一个数组errArray=array.new来保存错误,然后执行以下操作: rescue Exception => e errArray << e.message 感谢任何帮助(和建设性的批评) 编辑:模具功能: def die(e) p erro

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

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

rescue Exception => e
  errArray << e.message
感谢任何帮助(和建设性的批评)

编辑:模具功能:

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

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

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

class ExceptionCollector

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

  def errors
    @errors ||= []
  end
end

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

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

class ExceptionCollector

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

  def errors
    @errors ||= []
  end
end

然后,我们需要查看
die
method.的完整代码,告诉您为什么错误
未定义的局部变量或方法“errArray”
。这是一个与范围相关的问题。创建全局变量
$errArray=Array.new
。正如您所说,我认为最好的方法是在脚本顶部创建一个数组errArray=Array.new来保存错误。什么是
e
?给出完整的正文,然后我们需要查看
die
method.的完整代码,告诉您为什么错误
未定义的局部变量或方法“errArray”
。这是一个与范围相关的问题。创建全局变量
$errArray=Array.new
。正如您所说,我认为最好的方法是在脚本顶部创建一个数组errArray=Array.new来保存错误。什么是
e
?全身心地感谢。非常有用。例如,我可以使用$collect方法中调用$logger的方法中的变量吗?谢谢。非常有用。例如,我可以使用$collect方法中调用$logger的方法中的变量吗?
$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