Вначале стоит определиться с терминами, ведь если любой программист прекрасно знает что такое "исключения", то остальные далеко не все точно представляют о чем идет речь. Говоря простым языком исключения или исключительные ситуации - это ошибки, возникающие в ходе работы программы (в нашем случае скрипта). Но это не те ошибки, когда вы забыли поставить закрывающую скобку, запятую или ошиблись в имени переменной. Это ошибки, возникающие в некоторых (исключительных) ситуациях во время выполнения РАБОЧЕГО скрипта.
Рассмотрим простенький пример скрипта на VBScript, пытающегося прочитать значение какого-то параметра в реестре и выдать его в сообщении:
Dim Perem set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Popup "Начало скрипта"
Perem = "" Perem = WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Test") WSHShell.Popup Perem WSHShell.Popup "Конец скрипта"
Сообщение "Начало скрипта" появилось, следовательно, синтаксических ошибок мы не допустили, но вот затем появляется сообщение об ошибке
что и неудивительно - параметра с именем Test в разделе HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer не существует. Из-за этого наш пример не отработал до конца. Возникает логичный вопрос: а нельзя ли каким-то образом отловить момент появления ошибки, как-то его обработать и продолжить выполнение скрипта дальше? Оказывается, можно. Перепишем наш пример следующим образом:
Dim Perem set WSHShell = WScript.CreateObject("WScript.Shell")
WSHShell.Popup "Начало скрипта" Perem = ""
On Error Resume Next GetErr() if Err.Source="WshShell.RegRead" then Perem = "Параметр не существует" else Perem = WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Test") end if Err.Clear
WSHShell.Popup Perem WSHShell.Popup "Конец скрипта"
Function GetErr() If WSHShell.RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Test") Then End If End Function