【Ruby】『raise』意図的に例外を発生させる
意図的に例外を発生させる
概要
raise
メソッドを使用する- メソッドを実行すると
RuntimeError
が発生する - メソッドの引数に文字列を渡すと、その文字列がエラーメッセージになる。
- 文字列は省略もできるが、原因が特定しづらくなるためあまり良くない。
- 第1引数に例外クラス、第2引数に文字列を渡すと
RuntimeError
以外の例外を発生させることができる。
使い方
引数に文字列のみを渡すと、RuntimeError
が発生する。
def capital_of(country) case country when :japan 'tokyo' when :china 'beijing' when :france 'paris' else raise "無効な国名です。#{country}" end end capital_of(:japan) # => "tokyo" capital_of(:india) # => RuntimeError: 無効な国名です。india
例外クラスを指定することもできる
def capital_of(country) case country when :japan 'tokyo' when :china 'beijing' when :france 'paris' else raise ArgumentError, "無効な国名です。#{country}" end end capital_of(:china) # => "beijing" capital_of(:italy) # => ArgumentError: 無効な国名です。italy
文字列を省略することも可能だが、原因がわかりにくいため避ける。
def capital_of(country) case country when :japan 'tokyo' when :china 'beijing' when :france 'paris' else raise end end capital_of(:japan) # => "tokyo" capital_of(:germany) # => RuntimeError ※原因がわかりにくい!
コメント
実際に使用した場面は、特定の権限のユーザーがログインしたときの条件分岐で
何も当てはまらない場合に例外を起こすように実装を行った。
エラー原因がわかりにくいエラーメッセージが出ていたので、
エンジニアサイドで原因がすぐに理解できるようエラーメッセージを表示させた。
意図的に例外を発生させるってなんのためにやるのかイマイチわからなかったけど、
エラーが起きたときに、原因がわかるようにすることが目的だったのか〜😉