Ruby

RubyでCSVファイルを読み込むときのエラー処理パターン

CSVファイルに予期しないデータが入っていて、読み込むプログラムがエラーになることはよくある。
そんなとき、エラーになった行番号が表示されると調査が楽になるので、以下のように書くのをパターン化するといいかもしれない。

require "csv"

filename = "hoge.csv"

CSV.foreach(filename).with_index(1) do |row, lineno|
  begin
    # 本処理
    puts row[0].gsub("a", "b")
  rescue
    # 元の例外にメッセージを付加して投げ直す
    raise $!, "#{filename}#{lineno} 行目を処理中にエラーが発生しました。\n#{$!.message}", $!.backtrace
  end
end