Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Ruby辞典

  1. トップページ
  2. Ruby辞典
  3. begin / rescue / ensure / raise

begin / rescue / ensure / raise

例外処理の基本構文です。『begin』ブロックで例外を補足し、『rescue』で対処し、『ensure』で後処理を行います。

構文
# 基本的な例外処理の構文です。
begin
  # 例外が発生する可能性のある処理
rescue 例外クラス => e
  # 例外が発生した際の処理
ensure
  # 例外の有無に関わらず必ず実行される処理
end

# 複数の例外を補足します。
begin
  # 処理
rescue TypeError => e
  # 型エラーの処理
rescue ArgumentError => e
  # 引数エラーの処理
rescue => e
  # その他のエラーの処理(StandardError のサブクラスすべて)
end

# 例外を意図的に発生させます。
raise "エラーメッセージ"
raise RuntimeError, "エラーメッセージ"
構文一覧
キーワード概要
begin例外が発生する可能性のある処理ブロックを開始します。
rescue指定した例外クラスが発生した際に実行される処理を定義します。
ensure例外の有無に関わらず必ず最後に実行される処理を定義します。
raise意図的に例外を発生させます。
retry例外発生後に『begin』からやり直します。
else例外が発生しなかった場合に実行される処理を定義します。
サンプルコード
# 基本的な例外処理です。
begin
  puts 10 / 0
rescue ZeroDivisionError => e
  puts "エラー: #{e.message}"
end

# ensure でリソースを確実に解放します。
ファイル = nil
begin
  ファイル = File.open("存在しないファイル.txt", "r")
rescue Errno::ENOENT => e
  puts "ファイルが見つかりません: #{e.message}"
ensure
  ファイル&.close
  puts "後処理が完了しました。"
end

# retry でリトライ処理を実装します。
試行回数 = 0
begin
  試行回数 += 1
  puts "試行: #{試行回数}回目"
  raise "一時的なエラー" if 試行回数 < 3
  puts "成功しました。"
rescue RuntimeError => e
  puts "エラー: #{e.message}"
  retry if 試行回数 < 3
  puts "リトライ上限に達しました。"
end
概要

Rubyの例外処理は『begin/rescue/ensure/end』の構造で行います。『rescue』は複数指定でき、上から順に一致するクラスが適用されます。クラスを省略した場合は『StandardError』のサブクラスすべてを補足します。

『ensure』はデータベース接続・ファイル・ネットワーク接続などのリソースを確実にクローズするために使います。『retry』を使う場合は無限ループにならないよう試行回数の上限を必ず設けてください。メソッド定義内では『begin』を省略して直接『rescue』を書くことができます。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。