以前もPowerShell: ◆例外処理でちょっと調べたが、今回はTrapについてもう少し細かく試してみた。
まずはこんなスクリプトでエラーを拾ってみる。
001 002 003 004 005 006 | trap{ Write-Host "エラーが発生しました" } dir c:\nonexist -ea stop Write-Host "スクリプトの最終に到達しました" |
エラーを直接表示させたくないときはcontinueを追加してあげる。
エラー発生時点で処理を止めたい時は、continueの代わりにbreak
不思議な(素晴らしい)事にTrapは途中に書いてもちゃんと有効になる。
この様に比較的簡単にエラー処理は行えるのだが、関数とかが入ってきてスコープが絡むと若干面倒になる。
上記の例ではtrap処理のcontinueに続く処理は、実際にエラーが発生した9行目の後(10行目)ではなく、エラーが発生した関数を呼び出した13行目の後からということになる。
これを10行目から続けるためにはtrap処理を関数の中に書いてあげれば良い。
また、関数の中でtrapしつつ、後続処理を関数呼び出しの後から続けたい場合、関数内のtrap処理ではbreakし、親スコープのtrap処理でcontinueしてあげれば良い。
以下のような感じだ。
0 件のコメント:
コメントを投稿