2016-09-26 4 views
1

jRuby 라이브러리에서 발생한 예외를 계속 가져 오는 코드가 몇 가지 있습니다. 이 코드는 특정 예외 만 처리하지만 계속 유지하는 것은 그리워합니다.Ruby에서 잡을 예외를 찾는 방법

라이브러리 코드를 파고 들지 않고 특정 예외를 캡처하는 방법을 알아낼 수 있습니까?

+0

"[ 'rescue Exception'의 대안] (http://stackoverflow.com/a/18596924/128421)"과 관련되어 있습니다. –

답변

3

예외로 인해 프로그램이 종료되는 시점에서 이 표시되어야합니다. 예외 유형이 발생했습니다.

IRB (주) : 다음의 예에 의해보고 IRB

예를 들어, I는 예외의 종류를 굵게 한 001 : 0> DEF do_it (a, b); 종료; do_it (3,4,5)
하면 ArgumentError : 1 : do_it '에'에서
    (IRB) : 인수의 잘못된 번호 (IRB)에서
    (3 주어진 2, 예상) 1 이를 바탕으로
/Users/meagar/.rbenv/versions/2.3.1/bin/irb:11:in`

에서    , 나는 ArgumentError을 처리하는 데 필요한 알게 될 것입니다.

예외를 모두 catch 할 수 있습니다. 예외 처리기에서 디버거를 사용하여 catch 된 예외를 검사하고 형식을 파악한 다음 catch-all을 올바른 예외 유형으로 바꿉니다.

+2

말했듯이, 일반적인 예외의 예외가 아니라 특정 예외를 잡으려고한다는 것을 강조하고 다시 강조하는 것이 중요합니다. Exception 또는 벌거 벗은'구조 '가 사용되면 모든 종류의 악이 풀릴 수 있습니다. –

+0

[포켓 몬스터 예외 처리] (http://programmers.stackexchange.com/questions/319088/is-iniscriminately-catching-exceptions-pokemon-exception-handling-ever-accept)는 일반적으로 눈살을 찌푸지 만 좋은 방법입니다. 코드가 생성하는 예외 유형을 알고 응답을 작성하십시오. 'rescue => e' 그리고'e.class'를 검사하여 무슨 일이 일어나고 있는지 알 수 있습니다. – tadman

+0

명백하지 않은 경우 catch-all **이 코드 **에 남아 있다고 제안하지는 않습니다. 디버거를 통해 처리 할 예외의 올바른 유형을 결정한 다음이를 대체 할 것을 제안하는 것입니다. * 올바른 유형의 캐치 올. – meagar