質問: powershellのtrapの例外処理について 初歩的な質問ですが、powershellのtrapの例外処理ついて教えて下さい。 以下のようなスクリプトがあります。 ------------------------------------------------- test1.ps1 trap [exception] { echo "trap!!" } 5/0 echo "go go" ------------------------------------------------- test2.ps1 trap [exception] { echo "trap!!" } function fun($num) { 5/$num } fun 0 echo "go go" test1.ps1はtrapに遷移しないのですが、test2.ps1はtrapに遷移します。 どうしてなのでしょうか。 コマンドレットでエラーが発生した場合ののエラーハンドリングであって 「5/0」のような処理はコマンドレットでのエラーではないのでハンドリング されないのでしょうか。 では、なぜ、関数するとハンドリングされるのでしょうか。
回答: powershellのコンパイル時に定数畳み込みが行われるためのようですね。 >powershellの処理系では定数式のたたき込みを行っていて、 >定数式はコンパイル時に1度だけ評価される。 >式「1 / 0」は定数式なのでコンパイル時に評価され、ゼロ除算の例外が発生する。 >しかしtrap文はあくまで実行時の例外を捕捉するものだ。 参考url:http://d.hatena.ne.jp/eel3/20130609/1370780140