2013-09-27 19 views
2

我在寫一個腳本,它收集來自各種url的數據。我想從begin rescue塊中收集錯誤到數組中,以在程序以詳細模式運行時輸出它們。在正常使用情況下,失敗的連接將被忽略,腳本將轉到下一個網址。在ruby腳本中收集異常

我認爲這樣做是在腳本的頂部,以創建一個數組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

我們需要看到那麼'的完整代碼die' method..to告訴你爲什麼錯誤'未定義的局部變量或方法'errArray''。它是一個範圍相關的問題。創建全局變量'$ errArray = Array.new'。如你所說*我認爲最好的方法是在腳本的頂部創建一個數組errArray = Array.new來保存錯誤*。 –

+0

'e'是什麼?給全身 –

回答

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 
+0

謝謝。很有幫助。 例如,我可以使用$ collect方法中調用$ logger的方法使用變量嗎? – Ipsum

+0

沒關係,想通了。 – Ipsum