У меня есть оператор try-catch внутри оператора try-catch.Внутренний перехват перехватывает ошибку, но бросок не приводит к перехвату ошибки в операторе out catch.Вкратце, мой сценарий отформатирован так:
$ErrorPreference = "Stop"
try
{
getStuffFromDB
putStuffInDB
}
catch
{
write-host ("Error: " + $error[0])
}
function getStuffFromDB
{
try
{
-- database query statement
}
catch
{
throw
}
finally
{
close connection and clean up
}
}
function putStuffInDB
{
try
{
-- database insert statements statement
}
catch
{
throw
}
finally
{
close connection and clean up
}
}
Когда я запустил сценарий, ошибок не было, но я заметил, что в базе данных SQL Server, которую я пытался заполнить, отсутствовали данные.Когда я повторно запустил сценарий в режиме отладки, функция 'putStuffInDB' обнаружила ошибку, которая была обнаружена в блоке catch.Но когда я ступил, сообщение не было «брошено» во внешний блок catch, но обработало блок finally и завершилось.
Я явно пропускаю то, чего не вижу.В прошлом я использовал конструкцию в C #, и у меня никогда не возникало проблем с передачей ошибок во внешний блок catch.