例外が怒っても安心して終了するには
例外の書き方
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