Menu
Coddy logo textTech

다중 rescue 절

Coddy Ruby 여정의 로직 및 흐름 섹션에 포함된 레슨 — 56개 중 45번째.

하나의 begin 블록은 여러 개의 rescue 절을 가질 수 있습니다. Ruby는 이를 위에서 아래로 확인하며 예외 클래스가 일치하는 첫 번째 절을 실행합니다.

begin
  number = Integer(gets.chomp)
  result = 100 / number
  puts result
rescue ArgumentError
  puts "That's not a valid number."
rescue ZeroDivisionError
  puts "Can't divide by zero."
end

순서가 중요합니다: 일반적인 클래스보다 구체적인 클래스를 먼저 나열하세요. StandardError를 먼저 배치하면 모든 것을 삼켜버려 나중의 분기들이 절대 실행되지 않을 것입니다.

쉼표로 나열하여 한 브랜치에서 여러 예외 클래스를 잡을 수도 있습니다:

begin
  risky_call
rescue ArgumentError, TypeError => e
  puts "Bad input: #{e.message}"
end

여러 실패 모드에서 복구 코드가 동일한 경우에 이것을 사용하십시오.

challenge icon

챌린지

쉬움

입력에서 두 줄을 읽으며, 두 줄 모두 정수여야 합니다. 둘 다 Integer(...)를 사용하고, 첫 번째 수를 두 번째 수로 나눕니다.

별도의 rescue 분기를 사용하여 세 가지 경우를 처리하세요:

  • ArgumentErrorBad number!를 출력합니다
  • ZeroDivisionErrorCannot divide by zero!를 출력합니다
  • TypeErrorWrong type!를 출력합니다

모든 것이 정상적으로 작동하면, Result: <a / b> (정수 나눗셈)를 출력합니다.

입력 10 / 2에 대해 출력은 Result: 5입니다. 10 / 0에 대해서는 Cannot divide by zero!입니다. 10 / abc에 대해서는 Bad number!입니다.

치트 시트

begin 블록은 여러 개의 rescue 절을 가질 수 있습니다 — Ruby는 이를 위에서 아래로 매칭합니다:

begin
  number = Integer(gets.chomp)
  result = 100 / number
  puts result
rescue ArgumentError
  puts "That's not a valid number."
rescue ZeroDivisionError
  puts "Can't divide by zero."
end

일반적인 예외 클래스보다 구체적인 예외 클래스를 먼저 나열하세요 — StandardError와 같은 일반적인 클래스를 먼저 배치하면 이후의 모든 분기를 삼켜버리게 됩니다.

쉼표로 구분하여 하나의 분기에서 여러 예외 클래스를 포착할 수 있습니다:

rescue ArgumentError, TypeError => e
  puts "Bad input: #{e.message}"

직접 해보기

raw_a = gets.chomp
raw_b = gets.chomp

# TODO: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

로직 및 흐름의 모든 레슨