例外
公式サイト:
class Exception | Ruby リファレンスマニュアル [公式]
使い方
rescue で型を指定しなかった場合、 StandardError (とそのサブクラス) のみがキャッチされる。
begin
    raise "Error"                 # will be caught
    raise Exception.new("Error")  # will not be caught
rescue => e
    puts e.message
endCode language: Ruby (ruby)
StandardErrorはExceptionのサブクラスRuntimeErrorはStandardErrorのサブクラスRuntimeError<StandardError<ExceptionExceptionはシステム関係の例外も含む- アプリケーションレベルの例外は 
StandardError(とそのサブクラス) を使うべき 
参考:
例外処理 (begin – rescue と raise) をもう一度きちんと確認してみた – Qiita
予期しないエラーが発生した場合、例外処理をする | あずきぱん
Exception
全ての例外の祖先のクラス。
begin
    raise Exception.new("Error")
rescue Exception => e
    puts e.message
endCode language: Ruby (ruby)
参考:
class Exception | Ruby リファレンスマニュアル [公式]
Exception#message | Ruby リファレンスマニュアル [公式]
Exception#backtrace | Ruby リファレンスマニュアル [公式]
Exception.new
例外オブジェクトを生成して返す。
new(error_message = nil) -> Exception exception(error_message = nil) -> Exception
error_message- エラーメッセージを指定する。
Exception#messageが返す値となり、デフォルトの例外ハンドラで表示される。 
e = Exception.new("This is an error.")
p e             # => #<Exception: This is an error.>
puts e.message  # => "This is an error."Code language: Ruby (ruby)
参考:
Exception.exception | Ruby リファレンスマニュアル [公式]
StandardError
通常のプログラム (アプリケーション) で発生する例外を束ねるクラス。
rescue 節でクラスを省略した場合、StandardError とそのサブクラスの例外が捕捉される。
参考:
独自例外を定義するときは StandardError を継承する | Hack Your Design!
自前の例外クラスで StandardError を継承する | deadwood
エラーコード付きの独自例外クラスを作成 + カスタム logger で出力 | のんびり SE の議事録
自前の例外クラスを作るとき Exception ではなく StandardError を継承する理由 | yarb の日記
class StandardError | Ruby リファレンスマニュアル [公式]
RuntimeError
特定の例外クラスに該当しないエラーが起こった場合に発生する例外。
Kernel.#raise で例外クラスを指定しなかった場合には、RuntimeError が発生する。
raise "Error"  # => throw: `RuntimeRrror`Code language: Ruby (ruby)
参考:
class RuntimeError | Ruby リファレンスマニュアル [公式]
ArgumentError
数や型の不一致、範囲外の値が指定されたなど、引数に起因するエラー。
参考:
class ArgumentError | Ruby リファレンスマニュアル [公式]
raise
例外 RuntimeError を発生させる。
raise "Error"Code language: Ruby (ruby)
例外 SyntaxError を発生させる。
raise SyntaxError, "Invalid syntax"
raise SyntaxError.new("Invalid syntax")Code language: Ruby (ruby)
最後の例外を再発生させる。rescue 節で、例外を外部のコードに伝搬させるために使用する。
raiseCode language: Ruby (ruby)
参考:
Kernel.#fail | Ruby リファレンスマニュアル [公式]
raise – 制御構造 | Ruby リファレンスマニュアル [公式]
How do I add information to an exception message in Ruby? – Stack Overflow
begin … rescue … ensure … end
begin
    expressions...
[rescue [error_type, ...] [=> evar] [then]
    expressions...]...
[else
    expressions...]
[ensure
    expressions...]
end
begin から rescue までが例外の捕捉対象 (本体) となる。
例外が指定した例外クラスのインスタンス (サブクラスを含む) である場合に、該当する rescue 節に捕捉され、その rescue 節が実行される。
例外が発生しなかった場合に else 節が実行される。
例外の発生・非発生に関わらず、ensure 節は最後に必ず実行される。
begin 式全体の評価値は、本体 / rescue 節 / else 節のうち最後に評価された文の値となる。各節において文が存在しなかったときの評価値は nil となる。ensure 節の値は無視される。
クラス / モジュール / メソッドの定義では、begin キーワードを使うことなく定義全体 (本体) を処理対象として rescue 節、else 節、ensure 節によって例外を処理することができる。
参考:
begin – 制御構造 | Ruby リファレンスマニュアル [公式]
rescue 修飾子
expr1 rescue expr2
参考:
begin – 制御構造 | Ruby リファレンスマニュアル [公式]
特殊変数
$!、$@ は例外発生時、Kernel.#raise によりセットされる。
$! は最後に発生した例外が格納される。
$!
$@ は最後に例外が発生したソースコード上の位置が格納される。
$@
参考:
message
参考:
Exception#message | Ruby リファレンスマニュアル [公式]
Accessing error messages within a rescue block – Stack Overflow
backtrace
参考:
エラーを rescue して、rescue しない場合と全く同じエラーメッセージを出力する – Qiita
Exception#backtrace | Ruby リファレンスマニュアル [公式]
How do I get ruby to print a full backtrace instead of a truncated one? – Stack Overflow
How can I nicely print a formatted exception that I catch in a rescue block? – Stack Overflow
cause
参考:
RuntimeError のバックトレースを最初の raise までさかのぼって出力する – Qiita
Exception#cause | Ruby リファレンスマニュアル [公式]
full_message
参考:
Exception#full_message | Ruby リファレンスマニュアル [公式]
How to display error type? – Stack Overflow
at_exit
参考:
Kernel.#at_exit | Ruby リファレンスマニュアル [公式]
Global exception handler – Stack Overflow
特殊変数
$!:最後に発生した例外
参考:
e2mmap
例外にエラーメッセージフォーマットをマッピングするためのライブラリ
参考:
ruby/e2mmap: Module for Defining Custom Exceptions with Specific Messages – GitHub
ドキュメント: