2016-09-26 16 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

相关问题