0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Ruby】初学者向け-例外処理について

Posted at

例外処理について

本記事では例外処理についてまとめていきます。
 ※例外…プログラムの実行中に発生する異常やエラーのこと。

p

…例外オブジェクトの確認を行う

beginとrescueとensure

…beginブロック内で発生した例外をとらえ、適切に処理をするために
 rescueブロックを用いる。ensureブロック内に記載された処理は
 例外が発生してもしなくても実行される。
 beginブロックで行った処理の後処理が必要な場合に用いられる。

example_1.rb
    begin
    # 例外が発生する可能性のある処理
        result = 10 / 0 # ゼロ除算が発生してエラーになるコード
    
    # rescue単体でも使用できるが、下記のように特定のエラーが発生した場合にも使用できる
    rescue ZeroDivisionError => e
        # 例外発生時の処理
        puts "エラーが発生しました: #{e.message}" 

    # 必ず実行される処理
    ensure
        puts "処理が完了しました"
    end

retry 

…例外処理内部に入ったときに使用する。

example_2.rb
    a = 0
    
    begin
        b =  1 / a
    rescue ZeroDivisionError
        a += 1
        # もしZeroDivisionErrorが発生した場合、beginの先頭処理に戻って再び処理を行う
        
        retry
    ensure
        p b
        => 1
    end

raise

…明示的に例外を発生させたい場合に使用する。

example_3.rb
    # rails <エラー名>でも使用できるが、引数にエラーメッセージを設定することができる
    raise ArgumentError, "引数が不正です"
    => ArgumentError
    
    raise ArgumentError.new, "引数が不正です"
    => ArgumentError

バックトレースメソッド

…「p e.backtrace」をソースコード内に記述する。
 どのようにエラーが発生したかを確認できる。

example_4.rb
   begin
       1 / 0
   rescue ZeroDivisionError = > e
       p e.backtrace
   end

フルメッセージメソッド

…「p e.full_message」をソースコード内に記述する。
 エラーの発生個所とエラーの発生源を確認できる。

example_5.rb
   begin
       1 / 0
   rescue ZeroDivisionError = > e
       p e.full_message
   end

上記のメソッド等を用いて例外がシステム上で発生した際に
システムエラーが発生しないようにコードを記載することが大事です。

主な例外クラスの一覧

例外クラス名     発生する場面の例
SyntaxError 文法エラーがあった場合
SignalException 捕捉していないシグナルを受けた場合
ArgumentError 引数の数が合わない場合や、値が正しくない場合
RuntimeError 特定の例外クラスには該当しないエラーが発生した場合や、例外クラスを省略したraiseの呼び出し
NameError 未定義のローカル変数や定数を参照した場合
NoMethodError 未定義のメソッドを呼び出した場合
ZeroDivisionError 整数に対し、整数の0で除算を行った場合
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?