예외란 무엇인가요?
Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 43번째.
런타임 중에 0으로 나누기, "abc"를 정수로 파싱하기, nil에서 메서드 호출하기와 같이 무언가 잘못되면, 루비는 예외를 발생시킵니다. 프로그램이 중단되고, 루비는 발생한 일과 발생한 위치를 출력합니다.
10 / 0
# ZeroDivisionError: 0으로 나뉨각 오류의 종류는 고유한 클래스입니다. 몇 가지 일반적인 예시는 다음과 같습니다:
ZeroDivisionError: 정수를 0으로 나누는 경우ArgumentError: 메서드에 잘못된 인수가 전달된 경우 (Integer("abc"))
NoMethodError: 리시버(receiver)가 가지고 있지 않은 메서드를 호출할 때 발생 (nil.upcase)TypeError: 잘못된 종류의 객체에 대한 연산 ("a" + 1)
모든 예외 클래스에는 .message가 있습니다. 이는 예외가 처리되지 않았을 때 Ruby가 출력하는 사람이 읽을 수 있는 설명입니다. 다음 레슨에서는 프로그램이 계속 실행될 수 있도록 이러한 예외를 포착(catch)하는 방법을 알아봅니다.
챌린지
초급입력 한 줄(Ruby 표현식 이름)을 읽습니다. Ruby가 해당 표현식에 대해 발생시킬 예외 클래스의 이름을 출력하세요. case 문을 사용하세요 (실제로 예외를 발생시킬 필요는 없습니다):
divide-by-zero→ZeroDivisionErrornil-method→NoMethodErrorbad-integer→ArgumentErrorwrong-type→TypeError- 그 외의 경우 →
Unknown
입력이 nil-method인 경우, 출력은 NoMethodError입니다.
치트 시트
런타임 중에 문제가 발생하면, Ruby는 예외를 발생시키고(raises an exception) 프로그램이 중단됩니다. 일반적인 예외 클래스는 다음과 같습니다:
ZeroDivisionError: 정수를 0으로 나눌 때ArgumentError: 잘못된 인자 (예:Integer("abc"))NoMethodError: 수신 객체에 없는 메서드를 호출할 때 (예:nil.upcase)TypeError: 잘못된 종류의 객체에 연산을 수행할 때 (예:"a" + 1)
10 / 0
# ZeroDivisionError: divided by 0모든 예외 객체는 사람이 읽을 수 있는 설명을 담은 .message를 가지고 있습니다.
직접 해보기
kind = gets.chomp
# TODO: case kind ... 일치하는 예외 클래스 이름을 출력하세요
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.