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

備忘録。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
‘—–

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA