PowerShell armp não sendo desencadeada de forma consistente
-
21-09-2019 - |
Pergunta
Não consigo entender por que estou vendo esse comportamento no PowerShell:
PS C:\> trap { "Got it!" } 1/0
Attempted to divide by zero.
At line:1 char:22
+ trap { "Got it!" } 1/0 <<<<
PS C:\> trap { "Got it!" } 1/$null
Got it!
Attempted to divide by zero.
At line:1 char:22
+ trap { "Got it!" } 1/$ <<<< null
Por que uma expressão aciona a armadilha e a outra não?
Solução
Eu consideraria seu primeiro caso como um erro de análise. Esse é o analisador está tentando fazer dobragem constante (pré -computando o valor) e erros nesse ponto, porque recebe uma exceção de divisão por zero. Outros erros de sintaxe se comportam da mesma maneira que eles não acionam a armadilha:
trap { "Got it!" } 1/;
You must provide a value expression on the right-hand side of the '/' operator.
Se você alterar o código para isso:
$denom = 0
trap { "Got it!" } 1/$denom
Got it!
Attempted to divide by zero.
Em seguida, a armadilha dispara porque o analisador não pode mais pré -computar o valor.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow