VBScript の落とし穴: on error resume next と if 文の組み合わせ

| コメント(0) | トラックバック(0)

備忘録。VBScript の落とし穴。
on error resume next を使うときは要注意。

下記を実行するとわかるが、(wk <> 0) AND (wk = 0) が成り立つように見えてしまう。

'---- test1.vbs
on error resume next
wk = ""
if (wk <> 0) and (wk = 0) then
wscript.echo "True??" 'here
else
wscript.echo "False"
end if
wscript.echo " error:" & err.Number '13
wscript.echo " " & err.Description '型が一致しません。
'-----

VBScript暗黙の型変換でも「長さ0の文字列」は 数字(Integer)に変換できない
ためにエラーとなるが、
if 文の条件内でのエラーは [on error resume next]のために成り立ったとして
進んでしまう模様。

類似のトラブルは、とにかく if文の条件 がエラーとなるとき。
関数が(スペルミスで)存在しないとか、オブジェクトが取得できないまま使っているとか。
on error resume next
if 0 = hogefail() then
  ' hogefail()が存在しないとエラー→Trueとなってしまう
if 0 = objectfail.count then
  ' objectfail の取得に失敗しているとエラー→Trueとなってしまう

ちなみに、[続き] に記載した test2.vbs や test3.vbs ならば"False"が表示される。
Integer の0は暗黙の型変換で文字列0に変換できるため。

'---- test2.vbs
on error resume next
wk = ""
wk2 = 0
if (wk <> wk2) and (wk = wk2) then
wscript.echo "True??"
else
wscript.echo "False"
end if
wscript.echo " error:" & err.Number
wscript.echo " " & err.Description
'-----
'---- test3.vbs
on error resume next
wk = 0
if (wk <> "") and (wk = "") then
wscript.echo "True??"
else
wscript.echo "False"
end if
wscript.echo " error:" & err.Number
wscript.echo " " & err.Description
'-----

トラックバック(0)

トラックバックURL: http://www.sio.no-ip.com/mt/mt-tb.cgi/241

コメントする

アーカイブ

ウェブページ

Get Firefox

Get Firefox Get Thunderbird
Powered by Movable Type 4.261

このブログ記事について

このページは、しっが2009年4月 1日 04:04に書いたブログ記事です。

ひとつ前のブログ記事は「三歩進んで二歩下がる」です。

次のブログ記事は「VBScript の Empty」です。