素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

try〜catch文の正しい使い方

try〜catch文は、エラーを処理するときに使う。

たとえば、ユーザーにXPathを入力してもらい、document.evaluateでそれを評価する時、ユーザーが間違ったXPathを入力するかもしれない。
上の内容をそのままコードにすると、

var xpath=prompt('type XPath');
try{
document.evaluate(xpath,document,null,7,null);
}
catch(e){

if(e.message=='The expression is not a legal expression.')alert('XPath式が間違っています')
}

のようになる。

一見これでよさそうだが、これにはひとつ間違いがある。
try文の中で意図しないエラーが発生した場合にもcatch文で吸収されてしまうので、debugが困難になってしまうのだ。

正しくは

var xpath=prompt('type XPath');
try{
document.evaluate(xpath,document,null,7,null);
}
catch(e){

if(e.message=='The expression is not a legal expression.'){
alert('XPath式が間違っています')
}else{
throw e;
}

}

とするべきである。
こうすると、

var xpath=prompt('type XPath');
try{
document.evaluate(xpath,document,null,7,null));//括弧が多いのでエラーになる
}
catch(e){
if(e.message=='The expression is not a legal expression.'){
alert('XPath式が間違っています')
}else{
throw e;
}
}

のように、コード自体が間違っている場合にちゃんとエラーが投げられる。

というようなことを思いついたけど、実際にそうやってるコードを見たことが無いし、本当にそんなことをするべきなのかどうかは分からない。

追記:サイ本の98ページあたりにthrowで投げなおすとかそういうことが書いてあった。上のコードは珍しいものじゃなくてごく普通のコードのようだ。