#11 Rubyで学ぶエラーハンドリングの基本

Rubyのエラーハンドリングは、読みやすさを重視するRubyらしく、begin・rescueという独自の単語を使います。この記事では、Rubyにおけるエラーハンドリングの基本と、独自の書き方を解説します。

begin・rescueの基本

begin
  result = 10 / 0
rescue ZeroDivisionError
  puts "0では割れません"
end

他の言語のtry・catchにあたる部分が、Rubyではbegin・rescueという単語になります。

複数の種類のエラーを扱う

begin
  # 何らかの処理
rescue ZeroDivisionError
  puts "計算エラー"
rescue => e
  puts "その他のエラー: #{e.message}"
end

rescue => eのように書くと、エラーオブジェクトを受け取り、e.messageで詳しいメッセージを取り出せます。

ensureという必ず実行される部分

他の言語のfinallyにあたる部分は、Rubyではensureと書きます。

begin
  # 何らかの処理
ensure
  puts "処理が終わりました"
end

メソッド定義に直接rescueを書く

Rubyには、メソッド全体をbeginで囲まなくても、メソッド定義に直接rescueを書けるという簡潔な書き方があります。

def divide(a, b)
  a / b
rescue ZeroDivisionError
  puts "0では割れません"
end

独自のエラーを発生させる

自分でエラー状態を作り出したい場合はraiseを使います。

def set_age(age)
  raise ArgumentError, "年齢は0以上である必要があります" if age < 0
end

retryでもう一度試す

一時的な通信エラーなど、もう一度試せば成功するかもしれない処理には、retryという書き方が使えます。

attempts = 0
begin
  attempts += 1
  connect_to_server
rescue ConnectionError
  retry if attempts < 3
end

retryはbeginの先頭からやり直す働きをします。無条件に使うと無限ループになりかねないため、試行回数の上限と組み合わせるのが安全です。

Rubyならではの注意点

begin・rescue・ensureという単語は、他の言語のtry・catch・finallyとは名前が全く異なります。他言語の経験がある人ほど、最初は単語を覚え直す必要がある点に注意しましょう。

まとめ

Rubyのエラーハンドリングはbegin・rescue・ensureという独自の単語を使います。メソッド定義に直接書ける簡潔な書き方や、raiseによる独自エラーの発生も覚えておきましょう。


本ページはプロモーションを含みます。

参考書籍(PR)

Rubyをもっと学びたい方には「プロを目指す人のためのRuby入門[改訂2版]」がおすすめです。


PR

コードを書かずに自動化したい方へ

「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。

コメント

このブログの人気の投稿

#25 Rustで学ぶAI API(ChatGPT等)の呼び出し方の基本

#8 C++で学ぶ文字列操作の基本

#16 TypeScriptで学ぶ辞書型(マップ)の基本