Поскольку вы используете константы, интерпретатор пытается предварительно вычислить результат и терпит неудачу с ошибкой деления на ноль. Ваш код даже не выполняется, поэтому ловить нечего.
Вы можете убедиться в этом сами, изменив свой код для использования переменных, заставив его выполняться.
try {
$divisor = 0
[int]$a = 1/$divisor
}
catch {
write 1
}
finally {
write 2
}
Из Windows PowerShell в действии (стр. 257)
В данном примере используется 1/$null. Причина, по которой это делается вместо простого 1/0, заключается в том, что интерпретатор PowerShell выполняет нечто, называемое сворачиванием константных выражений.
Он смотрит на выражения, которые содержат только постоянные значения. Когда он его видит, он вычисляет это выражение один раз во время компиляции, поэтому ему не нужно тратить время на повторение этого во время выполнения.
Это означает, что невозможные выражения, такие как деление на ноль, перехватываются и обрабатываются как ошибки синтаксического анализа. Ошибки синтаксического анализа не могут быть обнаружены и не регистрируются, когда они вводятся в интерактивном режиме, поэтому они не являются хорошим примером. (Если один сценарий вызывает другой сценарий и в этом сценарии есть одна из этих ошибок, вызывающий сценарий может ее перехватить, а анализируемый сценарий — нет.)
person
Lieven Keersmaekers
schedule
16.05.2012