StandardError 클래스
StandardError 클래스
웬만해선 StandardError가 여러분이 만나는 모든 예외의 출발점이에요. 이름에서도 알 수 있듯이 "가장 표준적인" 오류 타입들이 전부 StandardError의 하위 클래스로 되어 있어요.
출처: Ruby 4.0 API
본문
예외 클래스를 명시하지 않은 rescue 절은 StandardError의 하위 클래스들을 모두 잡아내요. 그러니까 "이 예외들만, 전부" 잡는 셈이죠.
def foo
raise "Oups"
end
foo rescue "Hello" #=> "Hello"
여기서 raise "Oups"는 RuntimeError를 던지는데, RuntimeError는 StandardError의 하위 클래스라서 바로 잡혀요.
반대로 StandardError가 아닌 예외는 안 잡혀요. 예를 들어 파일을 불러오지 못하는 LoadError도 그렇죠:
require 'does/not/exist' rescue "Hi"
이런 예외가 발생해요:
LoadError: no such file to load -- does/not/exist
LoadError는 ScriptError 계열이라 StandardError가 아니에요. 그래서 저렇게 rescue를 달아도 잡히지 않고 예외가 그대로 올라오는 거예요. 일반적인 애플리케이션 오류는 거의 다 StandardError 안에 들어오니, 별도로 명시하지 않아도 편하게 잡을 수 있다고 이해하면 돼요.