[#23805] net/smtp — 佐藤 大輔 <densuke@...2.so-net.ne.jp>

佐藤です。

26 messages 2000/07/12
[#23806] Re: net/smtp — matz@... (Yukihiro Matsumoto) 2000/07/12

まつもと ゆきひろです

[#23808] Re: net/smtp — 佐藤 大輔 <densuke@...2.so-net.ne.jp> 2000/07/12

佐藤です。

[#23809] Re: net/smtp — matz@... (Yukihiro Matsumoto) 2000/07/12

まつもと ゆきひろです

[#23811] Re: net/smtp — Minero Aoki <aamine@...> 2000/07/12

あおきです。

[#23812] Re: net/smtp — matz@... (Yukihiro Matsumoto) 2000/07/12

まつもと ゆきひろです

[#23890] Ruby Entry Package and cygwin1.dll — Noritsugu Nakamura <nnakamur@...>

25 messages 2000/07/18
[#23895] Re: Ruby Entry Package and cygwin1.dll — WATANABE Hirofumi <eban@...> 2000/07/18

わたなべです.

[#23896] Re: Ruby Entry Package and cygwin1.dll — Noritsugu Nakamura <nnakamur@...> 2000/07/18

[#23897] Re: Ruby Entry Package and cygwin1.dll — Katsuyuki Komatsu <komatsu@...> 2000/07/19

小松です。

[#23898] Re: Ruby Entry Package and cygwin1.dll — WATANABE Hirofumi <eban@...> 2000/07/19

わたなべです.

[#23899] Re: Ruby Entry Package and cygwin1.dll — Katsuyuki Komatsu <komatsu@...> 2000/07/19

小松です。

[#23923] Re: [ruby-dev:10353] Re: should prohibit `module_function' for class Class — Masatoshi SEKI <m_seki@...>

11 messages 2000/07/19

[#23940] String#unpack と scanf の関係 — kiwamu <kiwamu@...>

こんにちは。岡部@東京都立大学と申します。

16 messages 2000/07/20

[ruby-list:23649] Re: rescue-ensure behavior diff between 1.4 and 1.5

From: "Kikutani, Makoto" <kikutani@...>
Date: 2000-07-01 21:27:49 UTC
List: ruby-list #23649
On Sun, 2 Jul 2000 04:03:30 +0900,
"Kikutani, Makoto" <kikutani@Galaxy.net> wrote:

> > そうです。1.5 では NameError とか SyntaxError のような
> > 「スクリプトが間違ってないと起こらないエラー」は
> > ScriptError (not is a StandardError)にまとめられて、
> > クラス省略の rescue では捕らえられなくなりました。
> 
> なるほど。ありがとうございます。

つごうよく、あおきさんが答えてくださったのでついでに聞いてしまおう。

もともとこの質問の原因は、curではSMTP鯖が死んでるときはrescueされて、
書いてたメッセージをpostponeしたりできるんですが、1.5ではエラーですぐ
シェルのプロンプトに戻ってしまう。調べると、

/usr/local/lib/ruby/1.5/net/protocol.rb:200:in `do_finish': 
undefined method `quit' for nil (NameError)
        from /usr/local/lib/ruby/1.5/net/protocol.rb:177:in `finish'
        from test-sendmail.rb:35

がrescueされてない。これは smtp = SMTPSession.new で作ったオブジェクト
を smtp.finish しようとしたときに出るものです。
つまり構造としては

begin
  smtp = SMTPSession.new

  begin
    smtp.start
  rescue
    ....
  end

ensure
  begin
    smtp.finish
  rescue
    ....
  end
end

みたいなかんじ。SMTP鯖が死んでるときは smtp.start で Exception が出ます。
いずれにせよ、このときはfinishする必要はないわけで、下のようにするべき
なんでしょうね。
もともとは rescue に引数を付けずに、なんでも救済したがる悪い
コーディングが原因か。

begin
  smtp = SMTPSession.new

  begin
    smtp.start
  rescue
    smtp = nil
    ....
  end

ensure
  smtp.finish if smtp
end


-- 
人生を背負い投げ

菊谷 誠(Kikutani Makoto)  g@kondara.org or kikutani@galaxy.net

In This Thread