0
0

[Ruby]代表的な例外クラスとその説明を洗い出してみた

Posted at

Rubyに定義されている例外クラスを調べてみました。

Exception

  • 全ての例外の祖先のクラス

StandardError

継承リスト
StandardError < Exception 
  • 通常のプログラムで発生する可能性の高い例外クラスを束ねるためのクラス
  • StandardError とそのサブクラスは、 rescue 節でクラスを省略したときにも捕捉できる

主なStandardErrorのサブクラス

ArgumentError

  • 引数の数があっていないときや、数は合っていて、期待される振る舞いを持ってはいるが、期待される値ではないときに発生
Time.at       # => wrong number of arguments (given 0, expected 1..2) (ArgumentError)
Array.new(-1) # => negative array size (ArgumentError)

NameError

  • 未定義のローカル変数や定数を使用したときに発生
bar
# => NameError: undefined local variable or method `bar' for main:Object
NoMethodError(NameErrorのサブクラス)

  • 定義されていないメソッドの呼び出しが行われたときに発生
self.bar
# => -:1: undefined method `bar' for #<Object:0x401a6c40> (NoMethodError)

IndexError

  • 添字が範囲外のときに発生

RangeError

1000000.chr

RuntimeError

  • 特定の例外クラスには該当しないエラーが起こったときに発生
  • また Kernel.#raise で例外クラスを指定しなかった場合も RuntimeError が発生

SystemCallError

  • Ruby の実装に用いられているシステムコールまたは一部の C 言語関数が失敗した時に発生する例外
  • システムコールの失敗した原因を表すエラーコードを保持する
  • 多くの場合、実際には SystemCallError そのものではなくサブクラスである Errno::EXXX (XXX はエラーコードの値によって異なる。システム定義のエラー名と同じ名前) が発生する
# Errno::EACCES 許可されていない操作を試みたときに発生
begin
  File.open("/root/secret_file.txt")
rescue Errno::EACCES => e
  puts "Error: #{e.message}"
end

# Errno::ENOENT 指定されたファイルやディレクトリが存在しないときに発生
begin
  File.open("non_existent_file.txt")
rescue Errno::ENOENT => e
  puts "Error: #{e.message}"
end

TypeError

  • メソッドの引数に期待される型ではないオブジェクトや、期待される振る舞いを持たないオブジェクトが渡された時に発生

ZeroDivisionError

整数に対して整数の 0 で除算を行ったときに発生

NoMemoryError

  • メモリの確保に失敗すると発生

ScriptError

  • スクリプトのエラーを表す例外

LoadError(ScriptErrorサブクラス)

  • require または load メソッドでファイルの読み込みに失敗したときに発生

SyntaxError(ScriptErrorサブクラス)

  • ソースコードに文法エラーがあったときに発生

SecurityError

セキュリティ上の問題が起きたときに発生

SystemExit

  • Ruby インタプリタを終了させるときに発生
  • exit メソッドが呼び出されたときに発生します。このエラーはプログラムの終了を示す

SignalException

  • 捕捉していないシグナルを受け取ったときに発生
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0