2011年4月4日月曜日

◆例外処理(Trap)

以前もPowerShell: ◆例外処理でちょっと調べたが、今回はTrapについてもう少し細かく試してみた。

まずはこんなスクリプトでエラーを拾ってみる。

001
002
003
004
005
006

trap{
 
Write-Host "エラーが発生しました"
}

dir c:\nonexist -ea stop
Write-Host "スクリプトの最終に到達しました"

結果は、
image

エラーを直接表示させたくないときはcontinueを追加してあげる。

image

エラー発生時点で処理を止めたい時は、continueの代わりにbreak

image

不思議な(素晴らしい)事にTrapは途中に書いてもちゃんと有効になる。
image

この様に比較的簡単にエラー処理は行えるのだが、関数とかが入ってきてスコープが絡むと若干面倒になる。

image
上記の例ではtrap処理のcontinueに続く処理は、実際にエラーが発生した9行目の後(10行目)ではなく、エラーが発生した関数を呼び出した13行目の後からということになる。

これを10行目から続けるためにはtrap処理を関数の中に書いてあげれば良い。

image

また、関数の中でtrapしつつ、後続処理を関数呼び出しの後から続けたい場合、関数内のtrap処理ではbreakし、親スコープのtrap処理でcontinueしてあげれば良い。
以下のような感じだ。

image

0 件のコメント:

コメントを投稿