UncaughtThrowError 클래스

UncaughtThrowError 클래스

UncaughtThrowErrorthrow로 던진 태그(tag)에 대응하는 catch 블록이 없을 때 발생하는 예외예요. Ruby의 catch/throw는 예외가 아니라 **비지역 탈출(non-local exit)**을 위한 제어 흐름 메커니즘이에요. 그런데 던진 태그를 받아줄 catch가 없다면, 그걸 알려주기 위해 이 예외가 발생해요.

출처: Ruby 4.0 API — UncaughtThrowError

본문

throw "foo", "bar"

위 코드는 다음과 같은 예외를 일으켜요.

UncaughtThrowError: uncaught throw "foo"

보통 throwcatch와 짝을 이루어 쓰기 때문에 이 예외가 터지는 일은 드물지만, 상태에 따라 catch가 실행되지 않는 경로로 흘러가면 발생할 수 있어요.

Public Class Methods

new(*args)

UncaughtThrowError의 생성자예요. throw에 대응하는 catch가 없을 때 발생하는 예외를 만들어요.

throw "foo", "bar"

위 코드는 다음과 같은 예외를 일으켜요.

UncaughtThrowError: uncaught throw "foo"

Public Instance Methods

tag

throw에서 호출 대상이었던 태그 객체를 돌려줘요. 예를 들어 다음과 같이 던진 태그를 다시 꺼내볼 수 있어요.

begin
  throw :my_tag, 42
rescue UncaughtThrowError => e
  e.tag   #=> :my_tag
end

실제로는 던져진 태그를 저장해 뒀다가 반환하는 메서드라서, rescue UncaughtThrowError => e 뒤에 e.tag로 어떤 태그가 문제였는지 확인할 수 있어요.

value

throw에서 전달 대상이었던 반환 값을 돌려줘요. throw "foo", "bar"처럼 두 번째 인자로 값을 함께 던졌다면 e.value로 그 값을 확인할 수 있어요.

to_s

태그를 inspect한 형태가 포함된 메시지를 반환해요. 그래서 오류 메시지에 어떤 태그가 잡히지 않았는지 사람이 읽기 좋게 나타나요.