Coletando exceções no script ruby ​​- ruby, matrizes

Eu estou escrevendo um script que coleta dados de vários URLs. Eu quero coletar erros de begin rescue blocos em uma matriz para gerá-los quando o programa é executado no modo detalhado. Com o uso normal, uma conexão com falha é ignorada e o script passa para o próximo URL.

Eu pensei que a melhor maneira de fazer isso seria criar uma matriz errArray = Array.new na parte superior do script, para conter erros e, em seguida, faça:

rescue Exception => e
errArray << e.message

em várias funções para registrar erros. o die função produz a matriz usando p a menos que esteja vazio. No entanto, recebo o erro

Undefined local variable or method "errArray"

Qualquer ajuda (e crítica construtiva) apreciada.

EDIT: função do dado:

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

Respostas:

4 para resposta № 1

errArray não é variável global e, portanto, os métodos não têm acesso a ele. Você pode declará-lo como uma variável global $err_array.

No entanto, a melhor solução seria criar uma classe simples:

class ExceptionCollector

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

def errors
@errors ||= []
end
end

E então simples:

$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

Cardápio