2

さまざまな URL からデータを収集するスクリプトを作成しています。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
4

1 に答える 1

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 
于 2013-09-27T12:34:12.903 に答える