2016-09-26 14 views
1

我被給了一些代碼,不斷從jRuby庫中引發異常。該代碼只處理某些異常,但它錯過了我一直得到的。如何找出在Ruby中遇到什麼異常

有沒有一種方法可以找出如何捕獲特定的異常而無需挖掘庫代碼?

+0

「[替代'救援例外'](http://stackoverflow.com/a/18596924/128421)」是相關的。 –

回答

3

在您的異常導致程序退出的位置,您應該顯示顯示的引發的異常類型。

例如,我已經加粗異常的類型,如以下實施例報道由IRB:

IRB(主):001:0> DEF do_it(A,B);結束; do_it(3,4,5)
引發ArgumentError:錯誤的參數數目(給定3,預期2)
   從(IRB):1:在`do_it」
   從(IRB):1
   從/Users/meagar/.rbenv/versions/2.3.1/bin/irb:11:in`」

在此基礎上,我就知道我需要處理ArgumentError

如果不成功,您可以捕獲所有異常,在異常處理程序中使用調試程序檢查捕獲的異常並找出其類型,然後用正確的異常類型替換catch-all。

+2

如前所述,重要的是要強調並重新強調我們要捕獲特定的異常,而不是通用的「異常」。如果使用Exception或者使用'rescue',那麼各種各樣的邪惡都會破裂。 –

+0

雖然[神奇寶貝異常處理](http://programmers.stackexchange.com/questions/319088/is-indiscriminately-catching-exceptions-pokemon-exception-handling-ever-accept)通常是不被接受的,但這是一種很好的方法知道代碼正在生成的異常類型,並寫入響應。 'rescue => e',然後檢查'e.class'知道發生了什麼。 – tadman

+0

如果不是很明顯,我並不是說**代碼中保留了全部**,我建議僅使用它來通過調試器確定要處理的正確類型的異常,然後*替換*正確的類型的全部。 – meagar

相關問題