다중 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여러 실패 모드에서 복구 코드가 동일한 경우에 이것을 사용하십시오.
챌린지
쉬움입력에서 두 줄을 읽으며, 두 줄 모두 정수여야 합니다. 둘 다 Integer(...)를 사용하고, 첫 번째 수를 두 번째 수로 나눕니다.
별도의 rescue 분기를 사용하여 세 가지 경우를 처리하세요:
ArgumentError→Bad number!를 출력합니다ZeroDivisionError→Cannot divide by zero!를 출력합니다TypeError→Wrong 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
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.