Last updated on :August 28th, 2023 at 05:23 pm
PowerShellでtry-catch-finally構文を二重ネストして使うことがあったのですが、内側のcatchでexitした後の挙動についてまとまった記事がなかったのでメモ。
知りたいこと
以下のようにtry-catch-finally構文で二重ネストした時、内側のcatchで例外を捉えてexit 1した時に内外のfinallyはそれぞれ実行されるのか?
try{
①(外側のtryブロック)
try{
②(内側のtryブロック)
}
catch{
③(内側のcatchブロック)
※ブロックの最後にexit 1
}
finally{
④(内側のfinallyブロック)
}
}
catch{
⑤(外側のcatchブロック)
}
finally{
⑥(外側のfinallyブロック)
}
結論
③(内側のcatchブロック)で例外を捉えてexit 1 する場合の処理の流れは以下の通り
- ①(外側のtryブロック)
- ②(内側のtryブロック) ※例外発生
- ③(内側のcatchブロック) exit 1
- ④(内側のfinallyブロック)
- ⑥(外側のfinallyブロック)
catchブロックは例外を捉えた時だけ実行されますが、finallyブロックは例外が発生してもしなくても実行されます。