● 例外の詳しい情報を得る
例外オブジェクトの代入
begin
#例外が発生する可能性がある処理
rescue 例外クラス => e #変数eに例外オブジェクトが代入される
#例外が発生する可能性がある処理(rescue節)
end
def cat(filename)
#ファイルの内容を表示する
File.open(filename) do |file| —————①ファイルを開く
file.each_line {|line| puts line} ————②ファイルの内容を表示する
end ————③ファイルを閉じる
resucue SystemCallError => e ————④例外処理 : 例外オブジェクトを変数eに代入
puts "--- 例外が発生しました ---"
puts "例外クラス: #{e.class}" ———⑤e.classで例外オブジェクトのクラス名を表示
puts "例外メッセージ: #{e.message}” ————⑥e.messageで例外メッセージを表示
end
filename = ARGV.first ———⑦コマンドプロントの引数を読み込み
cat(filename)
↪️>ruby cat.rb menu.txt -menu.txtテキストファイルを用意して”カフェラテ””カプチーノ”を入力
カフェラテ
カプチーノ
存在しない適当なファイル名を指定してプログラムを実行すると
↪️>ruby cat.rb not found.txt
—例外が発生しました—
例外クラス: Errno::ENOENT
例外メッセージ: No such file or directory @ rb_sysopen - not found.text
●Fileクラス —ファイル操作に組み込みライブラリのFileクラスを使う
●File.open —引数filenameで指定したファイルを開きファイル操作のためのFileオブジェクトを作ってfile変数に代入する
●each_line —配列のeachに似たメソッドで、ファイルの先頭から1行ずつ読み込み、繰り返しline変数 に代入する。読み込んだ各行は、putsメソッドで画面に表示する。
●SystemCallError => —ファイル操作などに失敗した時に発生する例外クラスです。例外クラスの後ろの=> eのeは変数。受け取った例外オブジェクトが変数eに代入される。
●e.class —例外オブジェクトのクラス名を表示
●e.message —例外のメッセージを表示
●classとmessage —例外クラスで使えるメソッド
●ARGV —Rubyが用意した特別な定数で、コマンドプロントで指定した引数を要素として持つ配列。AVGRで先頭の要素を取得する。