どうものりにぃです!
今回は、実務の中で使用した例外処理がデバックに便利だったので紹介していこうと思います!
例外処理とは
そもそも例外処理とは、自身が記載したコードに対してエラーが発生したことを検出し、エラーに対して適切な処理を行うことです。
通常エラーが発生すると、エラー箇所で処理が止まりプログラム自体が停止します。
しかし例外処理を行うことで、エラーが発生した場合にエラー箇所から例外オブジェクトが呼び出し元まで送られてきます。
つまり、エラーの種類ごとに
- エラー発生を画面に通知
- メールで知らせる
などを行いプログラムを最後まで実行させることができます。
私は実務の中で膨大な量のデータを繰り返し処理していく最中に出たエラーを例外処理で止めデバックを行いエラー要因を突き止めることができました。
このようにデバック処理との相性がよいため、ぜひ覚えてみてください!
基本文法
例外処理の基本は以下のようになります。
begin # 処理の開始 # エラーを発生させる可能性のあるコードを記載 rescue => e # 例外オブジェクトを代入した変数 # begin~rescueの間でエラーが発生した場合に実行される end
例外処理の使い方
では実際に使用していきましょう。
以下のように配列から数字を足していく処理を実行します。
ただし変数arrayの中に文字列を紛れ込ませます。
このまま実行すると
array = [1, 2, 3, "a", 4] num = 1 array.each do |x| sum = num + x puts sum end 実行結果 => 2 3 4 sample.rb:6:in `+': String can't be coerced into Fixnum (TypeError) from sample.rb:7:in `block in <main>' from sample.rb:4:in `each' from sample.rb:4:in `<main>'
このように文字列”a”を足したタイミングで処理が止まります。
では例外処理を利用してみましょう!
array = [1, 2, 3, "a", 4] num = 1 array.each do |x| begin sum = num + x puts sum rescue => e puts e.message end end 実行結果 => 2 3 4 String can't be coerced into Fixnum 5
上記の実行結果のように、最後まで処理が行うことができます。
これは文字列”a”を足したタイミングでrescueの方に処理が走りputs e.messageが実行されたためです。
処理が最後まで実行してくれるため、例外時に別のメソッドに切り分けることも可能になりますね。
例外処理の応用
例外処理にはエラー内容によって以下のように複数書くこともできます。
begin ... rescue RuntimeError ... rescue ZeroDivisionError ... end
また、例に出した簡素的な処理であれば、エラーの特定は容易にできると思います。
しかしながら実務の中だと、膨大な量のデータを扱うことになります。
その際に、例外処理+binding.pryなどのデバックを組み合わせるとエラー原因の追求がしやすくなります。
例えば、繰り返し顧客データを取り出す際、あるユーザーのみエラーが発生していたとすると
begin # エラー原因のコード rescue => e binding.pry end
このようにデバックで処理を止めユーザーの情報を調べることもできます。
これは僕が利用してみて便利だったので、よかったら利用してみくださね!
まとめ
今回は例外処理について紹介させていただきました!
エラーで処理を止めずに最後まで実行する上で便利な処理になります。
実務では膨大な量のでデータを扱うため、例外処理を用いてデバックを行うこともできます。
よければ参考にしてみくださね!