人気ブログランキング | 話題のタグを見る

Classic ASP on error resume next

Classic ASP のエラー処理について(今更)

on error resume next

response.write 1/0
response.write "a"
↑の場合、
on error resume next がないと 1/0(0割り) でこけて終了
ある場合は 1/0 のエラーがスルーされて、"a" が 出力される。
これはまあ当たり前。

sub func()
  on error resume next

  response.write 1/0
  response.write "b"
end sub

call func()
response.write "a"
↑の場合、
同様にon error resume next がないと 1/0(0割り) でこけて終了
ある場合は 1/0 のエラーがスルーされて、"b","a" が 出力される。
出力 >> ba
まあ普通。だけど呼び出し元で特にエラーをcatchしなくてもよいのが気持ち悪い。

on error resume next

sub func()
  
  response.write 1/0
  response.write "b"
end sub

call func()
response.write "a"
↑の場合、1/0 でこけてfuncが途中で終了。エラーが呼び出し元へスルー
その後 "a" が出力される。
出力 >> a
よくよく考えればそう、という感じ。

on error resume next

sub subfunc()
  response.write 1/0
  response.write "c"
end sub

sub func()
  call subfunc()
  response.write "b"
end sub

call func()
response.write "a"
↑の場合、1/0 でこけてエラーがmainの処理まで一気にスルーされて、"a"が出力される。
"b"も"c"もすっとばされる。
出力 >> a


ということで、エラーが発生した場合、
同じスコープにon error resume next が無い場合は途中で処理が終了し呼び出し元にエラーがスルーされる。(呼び出し元に on error resume next が無い場合はこけて終了)
同じスコープにon error resume next がある場合は処理を継続し、さらに呼び出し元にエラーがスルーされる。(呼び出し元に on error resume next が無くてもこけない)

ややこしい・・・。
by fiah | 2012-08-28 15:05