From: "NARUSE, Yui" Date: 2008-06-22T16:41:16+09:00 Subject: [ruby-dev:35201] Re: IncompatibleEncodingError 成瀬です。 Kouhei Sutou wrote: > Ruby 1.9ではたくさんの"incompatible encodings: ..."という例 > 外を目にすると思うのですが、その例外クラスをArgumentErrorか > らIncompatibleEncodingErrorというような専用の例外クラスにす > るというのはどうでしょうか? > > "incompatible encodings: ..."なエラーを例外を捕まえやすくす > ると、エンコーディングを設定し直して再チャレンジするとか、親 > 切なエラーメッセージを出力するというようなことがしやすくなる > と思います。 > > def parse(input) > begin > MyParser.new(input).parse > rescue IncompatibleEncodingError > puts "input encoding must be #{$!.expected_encoding}" > puts "but was #{$!.actual_encoding}" > nil > end > end たしかにそれはいいかもしれません。 迷うところが、 * IncompatibleEncodingError にするか、EncodingError と一段広く取っておくか * スーパークラスを ArgumentError にするか あたりでしょうか。 なお、現在 incompatible encoding や differ の ArgumentError が投げられる場合、 期待されるエンコーディングがない場合も多いのではないかと思います。 基本的には receiver のエンコーディングと argument のエンコーディングが 異なるとかでしょうね。 # つまり、receriver と argumentがとれるべきかなぁ。 -- NARUSE, Yui