Ruby よく発生するエラーと原因例

自分でプログラムを書いて実行してみると、想定と違って英文がずらずらと表示されることがある。エラーだ。最初はびっくりするが、発生したときにはそのメッセージを読むことで解消できることも多い。

エラーとその原因

よく発生するエラー(例外クラス)と考えられる原因の例。

コードは、irbで実際にエラーを発生させたもの(バックトレースは省略)。

NameError

  • 未定義のローカル変数や定数、privateメソッドなどを呼び出した
  • 外部ファイルのrequireを忘れた
val = name  # nameという変数は定義されていない

# エラー文
NameError (undefined local variable or method `name' for main:Object)

NoMethodError

put "Hello!"  # putsのスペルミス

# エラー文
NoMethodError (undefined method `put' for main:Object)
Did you mean?  puts
               putc

TypeError

  • メソッドの引数が期待しない型(クラス)だった
10 + "1"  # 数値と文字列の足し算はできない

# エラー文
TypeError (String can't be coerced into Integer)

ArgumentError

  • 引数の数が違う
  • 引数が期待する値と異なる
"apple".count  # countはカウントする文字のパターンを引数として渡す必要がある

# エラー文
ArgumentError (wrong number of arguments (given 0, expected 1+))

ZeroDivisionError

  • 整数を0で割ろうとした
5 / 0  # 5 ÷ 0

# エラー文
ZeroDivisionError (divided by 0)

SystemStackError

  • システムスタックがあふれた(無限ループなど)

LoadError

  • requireloadの実行に失敗

SyntaxError

構文エラー。たいていプログラムの起動自体に失敗する。

  • end,の数の過不足
  • 閉じかっこ忘れ

irbでいい例がなかったので、以下はuser.rbというファイルを実行した例。わざとif文のendを消してみた。

user.rb:22: syntax error, unexpected end-of-input, expecting `end'

endが必要だと指摘してくれている。

参考資料