はじめに
どうしてもしょうがない時に使う例外の握りつぶし方についてメモ。
例外の握りつぶしとは?
本来エラーで処理が落ちるところを例外をなかったかのように処理を続行させること。
ちなみに当たり前ですが、例外を握りつぶすことで本来の例外が発生しないのでログやエラー検知の対象になりません。
もし例外を握りつぶす場合は、一旦それをすることによる問題がないかどうかを考える必要があります。
やり方
※&.
を使ったメソッドチェーンは、オーソドックスなパターンなので割愛
今回はrescueを使ったパターンを書いていきます。
具体例
以下はparamsの時刻情報をパースして変数に突っ込むという雑な例です。
rescue nil
はその前の処理で例外が発生した場合に処理を止めずに nil
を返すという挙動になります。
last_access = Time.zone.parse(params[:last_access]) rescue nil
その他のOSSコード例
RailsのActiveRecordのテストコードにも以下のような処理がありました。
activerecord/test/cases/adapters/postgresql/extension_migration_test.rb
class PostgresqlExtensionMigrationTest < ActiveRecord::PostgreSQLTestCase <中略> def teardown ActiveRecord::SchemaMigration.delete_all rescue nil <中略> end <中略> end
最後に
使わずに済むようだったら、より適切に例外を通知したり、システム上の例外を検知出来るようにすべきですが、こうしたアプローチもあるということを知るのも勉強かなと思うので、色んな面で引き出しを増やして行きたいと思った次第です。