基本構文(15)
「Trap」による例外処理
例外処理を行うには「Trap」構文を利用します。Javaで言うと「Catch」です。
「DivideByZeroException」をキャッチする(エラー表示+処理継続)
以下のスクリプトでは「$i」が0の時にゼロ除算で「DivideByZeroException」が発生します。
そこでTrapで「DivideByZeroException」をキャッチしてエラーメッセージを表示しています。
$i = 3 while ($i -ge -3) { trap [DivideByZeroException] { "divide by zero trapped" } 1 / $i-- }
実行結果
MSH C:\> $i = 3 MSH C:\> while ($i -ge -3) >> { >> trap [DivideByZeroException] >> { >> "divide by zero trapped" >> } >> 1 / $i-- >> } >> 0.333333333333333 0.5 1 divide by zero trapped Attempted to divide by zero. At line:7 char:8 + 1 / <<<< $i-- -1 -0.5 -0.333333333333333
- Trapでキャッチしてメッセージを表示した後は、通常のエラー(行番号など)を表示し、処理を継続します。
「DivideByZeroException」をキャッチする(エラー表示+処理中止)
「trap」のスクリプトブロックで「break」を利用すると・・・
$i = 3 while ($i -ge -3) { trap [DivideByZeroException] { "divide by zero trapped" break } 1 / $i-- }
実行結果
MSH C:\> $i = 3 MSH C:\> while ($i -ge -3) >> { >> trap [DivideByZeroException] >> { >> "divide by zero trapped" >> break >> } >> 1 / $i-- >> } >> 0.333333333333333 0.5 1 divide by zero trapped Attempted to divide by zero. At line:8 char:8 + 1 / <<<< $i--
- 通常のエラー(行番号など)を表示した後に処理を中止します。
「DivideByZeroException」をキャッチする(エラー非表示+処理継続)
「trap」のスクリプトブロックで「continue」を利用すると・・・
$i = 3 while ($i -ge -3) { trap [DivideByZeroException] { "divide by zero trapped" continue } 1 / $i-- }
実行結果
MSH C:\> $i = 3 MSH C:\> while ($i -ge -3) >> { >> trap [DivideByZeroException] >> { >> "divide by zero trapped" >> continue >> } >> 1 / $i-- >> } >> 0.333333333333333 0.5 1 divide by zero trapped -1 -0.5 -0.333333333333333
- 通常のエラー(行番号など)を表示せずに処理を継続します。