Ловушка Powershell не срабатывает последовательно
-
21-09-2019 - |
Вопрос
Я не могу понять, почему я вижу такое поведение в 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
Почему одно выражение запускает ловушку, а другое нет?
Решение
Я бы счел ваш первый случай ошибкой синтаксического анализа.То есть анализатор пытается выполнить постоянное сворачивание (предварительное вычисление значения) и выдает ошибки в этот момент, потому что он получает исключение деления на ноль.Другие синтаксические ошибки ведут себя таким же образом, т. е.они не запускают ловушку:
trap { "Got it!" } 1/;
You must provide a value expression on the right-hand side of the '/' operator.
Если вы измените код на этот:
$denom = 0
trap { "Got it!" } 1/$denom
Got it!
Attempted to divide by zero.
Затем срабатывает ловушка, потому что анализатор больше не может предварительно вычислить значение.
Не связан с StackOverflow