例外処理・ensureで後処理

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

ensure節を、begin~rescueの後に続けることで、例外発生の有無に関わらず、実行させる処理を書くことができます。
例外処理のスクリプト例で書いたコードに、ensure節の後処理を加えてみます。

スポンサーリンク

begin
    filenames = ['hello.dat', 'no_such_file.dat']
    filenames.each { |filname|
        file = open(filname)
        puts file.read
        file.close
    }
rescue => ex
    puts ex.class         # 例外の種類
    puts ex.message        # 例外メッセージ
    puts ex.backtrace    # 例外発生の位置情報
ensure
    if ex
        puts "Exception Error"
    else
        puts "No Exception Error"
    end
end

実行結果。

Hello, Yamada !
Today is beautiful day !
Errno::ENOENT
No such file or directory - no_such_file.dat
ex_test.rb:4:in `initialize'
ex_test.rb:4:in `open'
ex_test.rb:4
ex_test.rb:3:in `each'
ex_test.rb:3
Exception Error

では、以下のようにno_such_file.datをオープンしないで、例外が発生しない場合。

begin
    filenames = ['hello.dat', 'hello.dat']
    filenames.each { |filname|
        file = open(filname)
        puts file.read
        file.close
    }
rescue => ex
    puts ex.class         # 例外の種類
    puts ex.message        # 例外メッセージ
    puts ex.backtrace    # 例外発生の位置情報
ensure
    if ex
        puts "Exception Error"
    else
        puts "No Exception Error"
    end
end

実行結果。

Hello, Yamada !
Today is beautiful day !
Hello, Yamada !
Today is beautiful day !
No Exception Error

例外が発生しようと、発生しなかろうと、ensure節の処理が行われています。

スポンサーリンク
 
スポンサーリンク