yucken の業務上電脳 Tips 日記、なのだよ。-弐式-

いまさら電脳 Tips といふものを、書いてみむとして、するなり.元々は広い意味での電脳(コンピュータ)の Tips を書いていたのですが,いつのまにか,解析ツールの「電脳 ruby」と IDL の Tips がメインに (・)>

Ruby: 例外処理

いままで例外処理は特に使う必要性を感じなかったのですが、例外処理を使ってエラーをデバッギングしつつ例外処理の基本を学ぼうと考え、簡単な例外処理を試してみました。以下は、読み込んだデータの形式がファイルの構造にあってるかどうかをテストするものです。xio が FileIO オブジェクト。読み込んだファイルの行数を 6 で割った余りが 1 のときには、読み込んだ行は正規表現 rpath に当てはまる形、ファイル行数の 6 で割った余りが 1 でないときは、読み込んだ行は正規表現 rpatt に当てはまる形となります。したがって、そうでない場合、

ファイルの行数が 6 で割って 1 余るのに、正規表現 rpatt と読み込んだ行が当てはまる場合 (1)
ファイルの行数が 6 で割った余りが 1 以外になるのに、正規表現 rpath と読み込んだ行が当てはまる場合 (2)

の二つが補足すべきエラーです。

      begin
        message = "error in file structure!"
        raise message if( xio.lineno % 6 == 1 && line =~ rpatt ) # (1)
        # if data type data in line 1, 7, 13, 19, ....
        raise message if( xio.lineno % 6 != 1 && line =~ rpath ) # (2)
        # if meta-data type data in line 2, 3, 4, 5, 6, 8, 9, 10, ...
      rescue => err
        p err.class
        p err.message
        p err.backtrace
        p "now line #{xio.lineno} in the reading file"
        break
      end

今回はエラーと判定する条件のときに raise message でエラーを「起こし」(あるいはエラーのフラグを立てるというべき?)、エラーが「起こった」場合は、そのエラー内容(のオブジェクト)を rescue => err で、err に詰め込みます。あとは、err の内容を適宜表示するというものです。

ファイル構造がおかしい箇所を判定するのが目的なので、今回は、p "now line #{xio.lineno} in the reading file" でおかしい行番号を表示させて break して終わりという形をとりました。

参考サイト

uxmilk.jp
制御構造 (Ruby 1.9.3)




この記事は 7 月 27 日に作成投稿しましたが、記事の日時間隔を均等化するために、7 月 26 日投稿扱いに変更します。