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 のリファレンスを読んでおけば良かったな。

すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。