Как вы используете константы, интерпретатор пытается прекомпотировать результат и с ошибкой деления на нуль. Ваш код даже не выполняется, поэтому нечего ловить.
Вы можете проверить это сами, изменив код, чтобы использовать переменные, заставляя его выполнять.
try {
$divisor = 0
[int]$a = 1/$divisor
}
catch {
write 1
}
finally {
write 2
}
С Windows PowerShell в действии (с.257)
пример здесь использует 1/$ Null. Причиной для этого вместо просто 1/0 является то, что интерпретатор PowerShell делает что-то называемое сгибание постоянного выражения.
Он просматривает выражения, содержащие только постоянные значения. Когда он видит один, он оценивает это выражение один раз во время компиляции, поэтому не должен тратить время на повторное выполнение во время выполнения.
Это означает, что невозможные выражения, такие как деление на ноль, равны , пойманным и обрабатываемым как ошибки синтаксического анализа. Ошибки анализа не могут быть пойманы и не регистрируются, когда они введены в интерактивном режиме, поэтому они не делают для хорошего примера. (Если один сценарий вызывает другой сценарий, и что скрипт имеет одну из этих ошибок, сценарий вызова может поймать его, но сценарий может быть разобран нет.)
+1 - У вас есть ссылка на это? –
Итак ... мой плохой. :) Это не RuntimeException. Я просто скопировал FullyQualifiedErrorId, и это не содержит подробностей, важных для этого сценария. Что касается v3: я не могу найти ссылку (пока). Дуг Финке упомянул этот расчет в качестве примера в своей новой книге «PowerShell for Developers», поэтому я попытался и понял, что в v3 он действительно может быть схвачен. Извините за любую путаницу, вызванную неправильной терминологией ... :) – BartekB
Thx для обновления. Если вы найдете ссылку, я надеюсь, вы все равно опубликуете ее здесь. –