Classic ASP on error resume next
Classic ASP のエラー処理について(今更)
on error resume next がないと 1/0(0割り) でこけて終了
ある場合は 1/0 のエラーがスルーされて、"a" が 出力される。
これはまあ当たり前。
同様にon error resume next がないと 1/0(0割り) でこけて終了
ある場合は 1/0 のエラーがスルーされて、"b","a" が 出力される。
出力 >> ba
まあ普通。だけど呼び出し元で特にエラーをcatchしなくてもよいのが気持ち悪い。
その後 "a" が出力される。
出力 >> a
よくよく考えればそう、という感じ。
"b"も"c"もすっとばされる。
出力 >> a
ということで、エラーが発生した場合、
同じスコープにon error resume next が無い場合は途中で処理が終了し呼び出し元にエラーがスルーされる。(呼び出し元に on error resume next が無い場合はこけて終了)
同じスコープにon error resume next がある場合は処理を継続し、さらに呼び出し元にエラーがスルーされる。(呼び出し元に on error resume next が無くてもこけない)
ややこしい・・・。
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↑の場合、1/0 でこけてfuncが途中で終了。エラーが呼び出し元へスルー
sub func()
response.write 1/0
response.write "b"
end sub
call func()
response.write "a"
その後 "a" が出力される。
出力 >> a
よくよく考えればそう、という感じ。
on error resume next↑の場合、1/0 でこけてエラーがmainの処理まで一気にスルーされて、"a"が出力される。
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"
"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