Ruby基礎 ③

○ 例外処理

実行時に発生する問題に地王

プログラムを安定して動作させる

システムの品質を高める

・発生しうる例外(例外 = 実行時エラー)

→ゼロで割り算 ZeroDivisionError

→未定義の変数の呼び出し NameError

→数値変換で、数字ではない文字を指定 TypeErrp

→配列の範囲外にアクセス NoMethodError (NoNameErrorを継承したもの)

→ファイルが存在しない

→オブジェクトがnull

→引数が不正

→すべての例外に対応 ExceptionError (Exceptionはスーパークラスその他はサブクラスとなる)

———————————————————

begin

→予めコードを指定して、プログラム実行時に処理の問題を検出

rescue

→問題を検出したとき、どのように対応するか記述しておく。beginブロックの中で例外処理を見つけたら、rescueの中身が実行される。

raise

→対応を記述していない場合、メソッドの呼び出し元に対応を任せる。また、例外が発生していない状況でも例外処理を起動することができる。raise Exception.new

ensure

→ensureが記述されている場合には、例外が起こっていてもいなくてもensure以下を実行する

———————————————————

begin

        number = 0

    answer = 100 / number

    puts answer2

    raise ExceptionError

    puts "予期せぬエラーが発生しました"

rescue ZeroDivisionError => e

    puts "0では割り算できません"

    p e

rescue NameError => e

    puts "未定義の変数を呼び出しています"

    p e

rescue ExceptionError => e

    STRERR.puts “強制的にエラーを起こしました”

ensure

    # 実行文

end

   

———————————————————

def test_exception(number)

    puts 2

    begin

        puts 3

        answer = 100 / number

        return answer

        puts 4

    rescue ZeroDivisionError => e

        puts 5

        raise e

    end

    puts 6

end

begin

    answer = test_exception(0)

    puts 7

rescue ZeroDivisionError => e

    puts 8

    p e

end

作成したメソッドの中で例外が発生した場合には、その呼び出し元に例外が伝わる

def test_exception(number)

puts 2

    begin

        puts 3

        answer = 100 / number

        return answer

        puts 4

    rescue ZeroDivisionError => e

        puts 5

        raise e

    ensure

        puts 6

    end

end

puts 1

begin

    answer = test_exception(0)

    puts 7

rescue ZeroDivisionError => e

    puts 8

    p e

end

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です