Ruby/Rubyの基礎知識

Rubyの例外処理の基本(2ページ目)

Rubyがプログラム中で発生するエラーを扱う方法、例外処理の基本を解説します

橋本 拓也

執筆者:橋本 拓也

Rubyガイド

例外を捕捉する(rescue)

たとえばDateオブジェクトをnewする時、存在しない日付を渡してやると ArgumentError: invalid date が発生します。ArgumentErrorは、Exceptionから見ると Exception > StandardError > ArgumentError という孫の位置に当たります。

Date.new時のこの例外を捕捉して「とりあえず失敗したら今日のDateオブジェクトを作成する」という方法で「助け舟」を出してやりましょう。助け舟をあらかじめ用意してやることを「例外を捕捉」すると言います。例外を捕捉するためには、エラーが発生する可能性のある領域をbegin ... endで囲ってやり、例外が発生した場合の処理を rescue 以下に記述します。

raise => e とすることで、例外オブジェクトをeという変数に束縛しています。ログに例外の詳細を吐き出しつつ、とりあえずプログラムはDate.todayの値を使って続行させることが出来ます。

rescueする際に例外クラスを指定することで、特定の例外のみ捕捉させることができます。また、rescue節は複数設置可能です。ここでrescue指定した例外クラスの「すべての子」も補足対象となることに注意してください。たとえばrescue StandardError とすれば、StandardErrorを継承しているIOErrorやRangeErrorなども捕捉対象となります。以下に例を示します。

 

必ず実行させる(ensure)

begin内の実行が成功しようが失敗しようが、必ず実行させたいタイプの処理があります。たとえばbegin内でファイルをオープンしたので、処理を片付ける前に必ず閉じておきたい、というような場合です。

そういう場合はensure節を書いておくことで、begin内が成功した場合も、失敗してrescueに補足された場合も必ず実行されることが保証されます。

 

例外を発生させる(raise)

さて、ここまではRubyが発生させるエラーのみを扱って来ました。プログラム中で意図的に例外を発生させる場合、Kernel#raiseメソッドを使います。

引数にメッセージのみ指定する場合、RuntimeErrorが発生します。これはException > StandardError > RuntimeError というに位置する例外クラスです。raiseに引数として例外クラスを渡すことで、RuntimeError 以外の例外を発生させることができます。これは独自に定義した例外クラスでも構いません。

最後のページでは、いくつか例外処理の実例を示したいと思います。

  • 前のページへ
  • 1
  • 2
  • 3
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます