Menu
Coddy logo textTech

複数のrescue節

CoddyのRubyジャーニー「ロジックとフロー」セクションの一部。レッスン 45/56。

1つの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を最初に配置すると、すべてがそこで捕捉され、後続の分岐は決して実行されません。

複数の例外クラスをカンマで列挙することで、1つの分岐で捕捉することもできます:

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

複数の失敗モードでリカバリーコードが同じ場合に使用します。

challenge icon

チャレンジ

簡単

入力から2行を読み取り、どちらも整数を想定します。両方にInteger(...)を使用し、その後、1行目を2行目で割ります。

3つのケースを、それぞれ別の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!です。

自分で試してみよう

raw_a = gets.chomp
raw_b = gets.chomp

# TODO: begin ... rescue ArgumentError ... rescue ZeroDivisionError ... rescue TypeError ... end
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Rubyオンラインコンパイラ