以下の内容はhttp://sonic64.com//2004-10-14.htmlより取得しました。


Landscape トップページ | < 前の日 2004-10-13 2004-10-14 次の日 2004-10-15 >

Landscape - エンジニアのメモ 2004-10-14

Ruby で全ての例外を rescue (catch) する


* Ruby で全ての例外を rescue (catch) する

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [Ruby]

rescue Exception とすればあらゆる例外を rescue で捕捉できる。

表題の catch は Ruby の 多重ループを抜けるときなどに使う catch のことではなく、「例外を捕捉する」という意味で書いた。

[ruby-list:35487] Re: [ 質問] 例外の補足について
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/ ...
| begin - rescue - end による例外の補足機能では,補足できない例外があ
|るのでしょうか?

rescueに捕捉する例外を指定しないとStandardError(とそのサブク
ラス)を指定したと見なされます。例外の中にはStandardErrorのサ
ブクラスで無いものもありますから(たとえば、1.6ではNameError
はそうではありません)、その場合には捕捉できません。

具体的に例外を指定するか、

  rescue Exception

とするのが対処方法です。Exceptionを指定してあらゆる例外を捕
捉した場合には、思わぬ例外まで捕捉してしまわないように気をつ
けてください。

2004-10-09 で書いた 「添付ファイル付メールを送信する Ruby スクリプト」の samail 0.3 には例外発生時のリトライ機能を付けたのだが、それが機能していない。動作させたときのログを確認すると、Timeout::Error を rescue できていなかった。

C# の try catch や delphi の try exception では rescue Exception の動作がデフォルト。Ruby も同じようなものと思いこんでた。Ruby のリファレンスを読んでおけば良かったな。




以上の内容はhttp://sonic64.com//2004-10-14.htmlより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14