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
- 捕捉していないシグナルを受け取ったときに発生