基本構文(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
- 通常のエラー(行番号など)を表示せずに処理を継続します。