例外が怒っても安心して終了するには

例外の書き方

begin
  raise if ...
  ...
  raise "a"
resuce 例外クラス
 ...処理
rescue 例外クラス
 ...処理
rescue
 ....上の例外以外のもの時実行される
else
 ....例外が起きなかったとき実行される
ensure
 ...最期に必ず事項される。(後処理)
end

getsとちがいreadlineはEOF時に例外を出力する。これを利用するとこんなのが書ける。この辺はマニュアルがすごくわかりづらい。

begin
  while true
    puts readline
  end
rescue EOFError
  puts "EOF"
end

例外を複数キャプチャーその1

begin
  while true
    raise "STOP" if readline =~/stop/
    puts $_
  end
rescue EOFError
  puts "EOF"
rescue RuntimeError
  puts $!
end

例外を複数キャプチャーその2

begin
  while true
    raise "STOP" if readline =~/stop/
    puts $_
  end
rescue EOFError
  puts "EOF"
rescue
  puts $!
end

実行結果

$ ./exception.rb 
foo
foo
bar
bar
EOF
$ ./exception.rb 
foo
foo
stop
STOP