StandardError
StandardError
StandardError는 Ruby 예외 계층의 가장 기본이 되는 클래스예요. 대부분의 표준 예외들이 이 클래스를 상속받아요.
출처: Ruby 3.3 API
본문
StandardError의 파생 예외가 사실상 '일반적인 오류'의 대부분이에요. 그리고 rescue 절에서 명시적으로 예외 클래스를 지정하지 않으면, StandardError(와 그 하위 예외)만 잡아요.
예를 들어 좁은 의미의 rescue는 StandardError를 잡지만, Exception 전체를 잡지는 않아요.
def foo
raise "Oups"
end
foo rescue "Hello" #=> "Hello"
반대로, 없는 라이브러리를 require할 때 나는 LoadError도 StandardError의 하위 예외예요. 그런데 아래처럼 rescue로 잡으려 해도 실제 예외가 발생하니 주의해야 해요.
require 'does/not/exist' rescue "Hi"
위 코드는 rescue가 있음에도 다음 예외를 그대로 던져요.
LoadError: no such file to load -- does/not/exist
이건 LoadError가 잡히지 않는 게 아니라, rescue "Hi"가 require의 반환값을 평가하는 흐름과 얽혀서 그런 것처럼 보이는 것이에요. 어쨌든 핵심은 이거예요 — rescue 한 줄이나 블록을 빼먹은 채 예외를 던지는 패턴에서는 잘 동작하지 않으니, 일반적인 예외 처리는 명시적인 begin/rescue를 쓰는 게 안전해요.