2003年3月 堀之内 武
2004年3月 西澤 誠也
期待しない状況がが生じると例外が上がるります。
例外が発生すると通常はプログラムは終了し、メッセージが出力されます。
exception1.rb
%ruby exception1.rb exception1.rb:3:in `[]': index out of range (IndexError) from exception1.rb:3:in `p_4' from exception1.rb:6 |
自分で例外が上がるようにもできます。
exception2.rb
%ruby exception2.rb 16 exception2.rb:5:in `power': x must be a kind of Numeric (RuntimeError) from exception2.rb:9 |
Numeric===x
は
x
が数値オブジェクトであるかどうかを調べます。
ある程度エラーが予測されている場合は、
エラー時終了せず、適切な対処したいということがあるでしょう。
以下のように、
begin .. rescue .. [else] .. end、
を使うと例外を捕捉し、rescue以下の部分を実行します。
exception3.rb
%ruby exception3.rb "2010" |
例外を捕捉したときだけその下を実行する rescue に加えて、例外が発生しようがし
まいが必ず実行する ensure というのもあります。これも begin .. ensure
.. end の形で使います。
exception4.rb
%cat hello.txt Hello World! %ruby exception4.rb ["Hello World!\n", "file is end"] |
例外処理をうまく使うことで、 まさに「例外的な状況」に強いプログラムを作ることが出来ます。 汎用なプログラムをつくるためには、必須の機能です。 なお、軽微な例外的状況への対応のしかたとしては、 メソッドの戻り値を本来戻すべきクラスのオブジェクトでなく nil を返すという方法も良く使われます。例えば
irb(main):001:0> a = [10,20] => [10, 20] irb(main):002:0> a[1] => 20 irb(main):003:0> a[2] => nil |