Обработка ошибок
В VBScript нам доступен своего рода "более старый стиль" обработки ошибок, в котором используется On Error Resume Next
.Сначала мы включаем это (часто вверху файла; но вы можете использовать его вместо первого Err.Clear
ниже для их комбинированного эффекта), затем перед запуском нашего кода, генерирующего возможные ошибки,очистите все ошибки, которые уже произошли, запустите код, генерирующий возможные ошибки, а затем явно проверьте ошибки:
On Error Resume Next
' ...
' Other Code Here (that may have raised an Error)
' ...
Err.Clear ' Clear any possible Error that previous code raised
Set myObj = CreateObject("SomeKindOfClassThatDoesNotExist")
If Err.Number <> 0 Then
WScript.Echo "Error: " & Err.Number
WScript.Echo "Error (Hex): " & Hex(Err.Number)
WScript.Echo "Source: " & Err.Source
WScript.Echo "Description: " & Err.Description
Err.Clear ' Clear the Error
End If
On Error Goto 0 ' Don't resume on Error
WScript.Echo "This text will always print."
Выше мы просто распечатываем ошибку, если она произошла.Если ошибка была фатальной для скрипта, вы можете заменить второй Err.clear
на WScript.Quit(Err.Number)
.
Также обратите внимание на On Error Goto 0
, который отключает возобновление выполнения при следующем операторе при возникновении ошибки.
Если вы хотите проверить поведение при успешном выполнении Set
, прокомментируйте эту строку или создайте объект, который будет успешным, например vbscript.regexp
.
On Error
директива влияет только на текущую рабочую область (текущую Sub
или Function
) и не влияет на вызывающие или вызываемые области.
Повышение ошибок
Если вы хотите проверить какую-либо сортировкусостояния, а затем вызвать ошибку, которая будет обработана кодом, который вызывает вашу функцию, вы должны использовать Err.Raise
.Err.Raise
принимает до пяти аргументов, Number
, Source
, Description
, HelpFile
и HelpContext
.Использование файлов справки и контекстов выходит за рамки этого текста.Number
- это номер ошибки, который вы выбираете, Source
- имя вашего приложения / класса / объекта / свойства, которое вызывает ошибку, а Description
- краткое описание возникшей ошибки.
If MyValue <> 42 Then
Err.Raise(42, "HitchhikerMatrix", "There is no spoon!")
End If
Затем вы можете обработать возникшую ошибку, как описано выше.
Журнал изменений
Редактировать # 1: добавленErr.Clear
перед возможной ошибкой, приводящей к тому, что строка очищает все предыдущие ошибки, которые могли быть проигнорированы. Редактировать # 2: Уточнено. Редактировать # 3: Добавлены комментарии в блок кода.Уточнил, что ожидается, что будет больше кода между On Error Resume Next
и Err.Clear
.Исправлена некоторая грамматика, чтобы быть менее неудобной.Добавлена информация о Err.Raise
.Форматирование.