ファイルが存在しなかったときに備える

ファイルを読み込もうとしたときに、そのファイルが存在しないとエラーが発生してプログラムが止まってしまいます。

text = File.read("dummy.txt")

カレントディレクトリ(Rubyプログラムを実行しているディレクトリ)にdummy.txtというファイルが存在しないと、ファイルの読み込みに失敗して次のようなエラーメッセージが表示されます。

test.rb:1:in `read': No such file or directory - dummy.txt (Errno::ENOENT)
        from test.rb:1

このようなエラーの発生はは例外処理を使ことで回避することできます。begin〜rescueを使うと読み込みに失敗したとき(例外が発生したとき)の処理を書くことができます。

test = ""
fname = "dummy.txt"
begin
  text = File.read(fname)
rescue
  puts "ファイル<#{fname}>の読み込みに失敗しました"
end

begin〜rescue間で例外が発生すると、rescue〜end間のコードが実行されます。上記のプログラムではputsメソッドが実行されることになります。そしてrescue〜end間が実行された後は、引き続きendに続く行が実行され、ファイルの読み込みに失敗した後も、プログラムは止まらずに走り続けます。