StandardError

StandardError

StandardError는 Ruby 예외 계층의 가장 기본이 되는 클래스예요. 대부분의 표준 예외들이 이 클래스를 상속받아요.

출처: Ruby 3.3 API

본문

StandardError의 파생 예외가 사실상 '일반적인 오류'의 대부분이에요. 그리고 rescue 절에서 명시적으로 예외 클래스를 지정하지 않으면, StandardError(와 그 하위 예외)만 잡아요.

예를 들어 좁은 의미의 rescueStandardError를 잡지만, Exception 전체를 잡지는 않아요.

def foo
  raise "Oups"
end
foo rescue "Hello"   #=> "Hello"

반대로, 없는 라이브러리를 require할 때 나는 LoadErrorStandardError의 하위 예외예요. 그런데 아래처럼 rescue로 잡으려 해도 실제 예외가 발생하니 주의해야 해요.

require 'does/not/exist' rescue "Hi"

위 코드는 rescue가 있음에도 다음 예외를 그대로 던져요.

LoadError: no such file to load -- does/not/exist

이건 LoadError가 잡히지 않는 게 아니라, rescue "Hi"require의 반환값을 평가하는 흐름과 얽혀서 그런 것처럼 보이는 것이에요. 어쨌든 핵심은 이거예요 — rescue 한 줄이나 블록을 빼먹은 채 예외를 던지는 패턴에서는 잘 동작하지 않으니, 일반적인 예외 처리는 명시적인 begin/rescue를 쓰는 게 안전해요.