#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専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿