Rubyで例外処理

2020-12-16 hit count image

Rubyで予想できなかったエラーが発生した場合、プログラムが終了されないようにするため例外処理をする方法について説明します。

概要

プログラムを作成する時、私たちが予想できないエラーが発生する時もあります。このようにエラーが発生したら、プログラムは意図せず終了されます。例外処理はこのように私たちが予想できないエラーが発生する時、プログラムが終了されないようにしてくれます。

このブログポストではRubyで例外処理をする方法について説明します。

例外処理

普通の他の言語ではtry-catch文を使って例外処理をします。しかし、Rubyでは例外処理をするためにはbegin-rescue-end文を使います。

begin
  # 例外が発生する可能性がある部分
rescue
  # 例外処理
else
  # 例外が発生しない場合の処理
ensure
  # 最後に実行される処理
end

上のようにbeginrescueの間には私たちが予想できないエラーが発生する可能性がある部分を作成します。ここで例外が発生する場合、rescueelseの間が実行されます。最後にはensureendの間が実行されます。

もし、beginrescueの間でエラーが発生しない場合、elseensureの間が実行されってensureendの間の部分が実行されます。

デバッグ変数

Rubyではエラーが発生して例外処理の部分が実行されると、次のような変数が自動的に割り当てられます。

  • $!₩: 最後に起きた例外と関連する情報
  • $@: 最後に起きた例外の位置と関連する情報

例題

次のように例外処理を使うことができます。

puts "[Search a file with file name]"
begin
  print "file name: "
  file_name = gets.chop
  puts File.ftype(file_name)
rescue
  puts "Error!!"
  puts "#{$@}"
  puts "#{$!}"
end

上の例題を少し詳しく見てみます。

file_name = gets.chop

検索したいファイルの名前をgetsメソッドを使ってユーザーから入力してもらいます。入力した文字列をchopを使って改行文字(\n)を消します。

puts File.ftype(file_name)

ユーザーから入力してもらったファイルの名前をFileftypeメソッドを使ってファイルタイプを取ってきます。

[Search a file with file name]
file name: example.txt
file

実際、存在するファイルを入力したら上のようにファイルの種類を返します。しかし、存在してないファイルの名前を入力するとエラーが発生します。

rescue
  puts "Error!!"
  puts "#{$@}"
  puts "#{$!}"
end

エラーが発生したら、rescueendの間が実行されて画面にはError!!と言う文字が表示されて、発生した位置に関する情報($@)とエラーに関する情報($!)が表示されます。

Error!!
No such file or directory @ rb_file_s_ftype - test
["./index.rb:5:in `ftype'", "./index.rb:5:in `<main>'"]

完了

これでRubyで例外処理をする方法について調べて見ました。今からはbegin-rescueを使ってプログラムが急に終了されることを防止して見てください。

私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!

アプリ広報

今見てるブログを作成たDekuが開発したアプリを使ってみてください。
Dekuが開発したアプリはFlutterで開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。

Posts