Урок 13 по VBScript: Конструкция On Error Resume Next

Урок 13 по VBScript: Конструкция On Error Resume Next Программирование на VBSCRIPT

В этой статье мы рассмотри обработку ошибок в языке VBScript, а именно объектErr, конструкцию On Error Resume Next и On Error Goto 0. Конструкция VBScript On Error Resume Next включает обработку ошибок, а On Error Goto 0 отменяет их обработку.

Объект Err не нуждается в предварительном объявлении, и доступен всегда, давайте рассмотри его методы и свойства:

  • Description — данное свойство содержит описание ошибки.
  • Number — содержит целое число – номер ошибки. Если значение свойства Number ровно нулю – значит, ошибка отсутствует.
  • Source — свойство содержит название приложения, в котором возникла ошибка.

Методы

Clear – полная очистка информации об ошибке. Стоит обратить внимание, что информация об ошибке автоматически очищается при выполнении операторов On Error Resume Next, Exit Sub и Exit Function.

Raise(number, [source, description]) – данный метод позволяет генерировать собственную ошибку времени выполнения. Видим, что тут можно задать параметры, аналогичные по своей принадлежности свойствам самого объекта Err. Видим, что тут является обязательным только первый параметр.

Хорошо, теперь давайте рассмотри четыре примера на языке vbscript.

Пример 1

'------------------------------------------------------------------------------
' vbscript on error resume next
' произойдет вычисление только для первых 3 значений
' on_error_1.vbs
'------------------------------------------------------------------------------
 
Option Explicit
 
'включаем обработку ошибок
On Error Resume Next
 
dim MyArr(8), icount, Result, msgErr, msg 
 
' заполняем массив 
MyArr(0) = 5 
MyArr(1) = -3 
MyArr(2) = 15 
MyArr(3) = 0 
MyArr(4) = 2 
MyArr(5) = 6 
MyArr(6) = 0 
MyArr(7) = -1 
 
icount=0
msg=""
msgErr = "Ошибка!!!" & vbCrLf
 
'циклично делим число 15 на каждый элемент массива
Do  
     result=15/MyArr(icount)    
     If Err.Number <> 0 Then   
                 msgErr=msgErr & "Код ошибки: " & Err.Number & vbCrLf &_
                 "Описание: " & Err.Description & vbCrLf &_
                 "Приложение: " & Err.Source & vbCrLf
                 result = msgErr          
                 msgErr=""
     end if
     icount = icount+1
     msg=msg & Result & vbCrLf & vbCrLf
Loop While (icount < 8)
 
MsgBox msg

В данном примере мы создали массив из 8 элементов, каждый из которых является числом, два элемента – являются нулями. В цикле do…loop (работа данного цикла рассмотрена в статье Урок 7 по VBScript: Циклы do…loop и while…wend) идет деление числа 15 на каждый элемент массива (Урок 9 по VBScript: Массивы). Так как мы не включили в данном примере очистку информации об ошибке, то произойдёт деление только первых трёх значений, а всё остальное будет принято за ошибку.

Пример 2

'------------------------------------------------------------------------------
' vbscript on error resume next
' Вычисления не произойдут
' on_error_2.vbs
'------------------------------------------------------------------------------
 
Option Explicit
 
'включаем обработку ошибок
On Error Resume Next
 
dim MyArr(8), icount, Result, msgErr, msg 
 
' заполняем массив 
MyArr(0) = 5 
MyArr(1) = -3 
MyArr(2) = 15 
MyArr(3) = 0 
MyArr(4) = 2 
MyArr(5) = 6 
MyArr(6) = 0 
MyArr(7) = -1 
 
icount=0
msg=""
msgErr = "Ошибка!!!" & vbCrLf
 
'циклично делим число 15 на каждый элемент массива
Do  
     result=15/MyArr(icount)    
     If Err.Number <> 0 Then   
                 msgErr=msgErr + "Код ошибки: " & Err.Number & vbCrLf &_
                 "Описание: " & Err.Description & vbCrLf &_
                 "Приложение: " & Err.Source & vbCrLf
                 result = msgErr          
                 msgErr=""
                 ' Отменяем обработку ошибок!!!
                 On Error Goto 0
     end if
     icount = icount+1
     msg=msg & result & vbCrLf & vbCrLf
Loop While (icount < 8)
 
MsgBox msg

Тут мы дополнительно использовали конструкцию On Error Goto 0, которая отключает обработку ошибок. Это приведёт к тому, что никакие вычисления не будут произведены, и при запуске сценария автоматически произойдёт ошибка времени выполнения.

Скачать архив с примерами

Пример 3

'------------------------------------------------------------------------------
' on error resume next vbscript
' Правильный подход обработки ошибок
' on_error_3.vbs
'------------------------------------------------------------------------------
 
Option Explicit
 
'включаем обработку ошибок
On Error Resume Next
 
dim MyArr(8), icount, Result, msgErr, msg 
 
' заполняем массив 
MyArr(0) = 5 
MyArr(1) = -3 
MyArr(2) = 15 
MyArr(3) = 0 
MyArr(4) = 2 
MyArr(5) = 6 
MyArr(6) = 0 
MyArr(7) = -1 
 
icount=0
msg=""
msgErr = "Ошибка!!!" & vbCrLf
 
'циклично делим число 15 на каждый элемент массива
Do  
     'Очищаем информацию об ошибке
     Err.Clear
 
     result=15/MyArr(icount)    
     If Err.Number <> 0 Then   
                 msgErr=msgErr + "Код ошибки: " & Err.Number & vbCrLf &_
                 "Описание: " & Err.Description & vbCrLf &_
                 "Приложение: " & Err.Source & vbCrLf
                 result = msgErr          
                 msgErr=""
     end if
     icount = icount+1
     msg=msg & result & vbCrLf & vbCrLf
Loop While (icount < 8)
 
MsgBox msg

В этом примере мы сделали все правильно, так как вначале цикла прописали Err.Clear, который очищает информацию о предыдущих ошибках.

Ну и наконец четвертый пример, тут мы генерируем собственное описание ошибки.

Пример 4

'------------------------------------------------------------------------------
' on error resume next vbscript
' генерация собственной ошибки
' on_error_4.vbs
'------------------------------------------------------------------------------
 
Option Explicit
 
'включаем обработку ошибок
On Error Resume Next
 
dim MyArr(8), icount, Result, msgErr, msg 
 
' заполняем массив 
MyArr(0) = 5 
MyArr(1) = -3 
MyArr(2) = 15 
MyArr(3) = 0 
MyArr(4) = 2 
MyArr(5) = 6 
MyArr(6) = 0 
MyArr(7) = -1 
 
icount=0
msg=""
msgErr = "Ошибка!!!" & vbCrLf
 
'циклично делим число 15 на каждый элемент массива
Do  
     'Очищаем информацию об ошибке
     Err.Clear
     result=15/MyArr(icount)    
     If Err.Number <> 0 Then   
                 Err.Raise 100, "текущий сценарий", "пробуем делить на ноль"
                 msgErr=msgErr + "Код ошибки: " & Err.Number & vbCrLf &_
                 "Описание: " & Err.Description & vbCrLf &_
                 "Приложение: " & Err.Source & vbCrLf
                 result = msgErr          
                 msgErr=""
     end if
     icount = icount+1
     msg=msg & result & vbCrLf & vbCrLf
Loop While (icount < 8)
 
MsgBox msg

Давайте подытожим сказанной в данной статье…. Должен сказать, что материал получился довольно сухим на предмет обзора, это и не удивительно — большую часть занимают примеры программного кода. В целом, мы рассмотрели внутренний объект Err, который содержит методы и свойства для обработки исключительных ситуаций в сценариях на языке VBSCRIPT.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий для Гость Отменить ответ

  1. Гость

    разметка кода примеров слетела

    Ответить