Если мы столкнулись с более чем одной ошибкой при использовании On Error, Resume Next

При использовании On Error Resume Next она пропускает обнаруженную ошибку и переходит к следующей строке. Если мы используем err.Number и err.Description, он показывает сообщение и номер, связанные с ошибкой. У меня вопрос: а что если с ним столкнется больше, чем по ошибке... то как это покажет?

On Error Resume Next
    intDivideByZero
    floatDivideByZero
If err.Number <> 0 Then
    msgbox "the error number is : " & err.Number
    msgbox "the error description is : " & err.Description
End If
On error Resume 0

1 ответ

Решение

Обработка ошибок VBScript довольно ограничена. Вам нужно будет поставить обработчик ошибок после каждой строки, где может возникнуть ошибка. Так же Err объект не сбрасывается автоматически после ошибки, поэтому вам нужно сделать это самостоятельно. В противном случае объект все равно будет указывать на ошибку после следующего оператора, даже если там не произошло ни одного.

On Error Resume Next
intDivideByZero
If Err Then
    WScript.Echo "0x" & Hex(Err.Number) & ": " & Err.Description
    Err.Clear
End If
floatDivideByZero
If Err Then
    WScript.Echo "0x" & Hex(Err.Number) & ": " & Err.Description
    Err.Clear
End If
On Error Goto 0

Вы можете немного упростить это, поместив обработчик в процедуру и вызывая эту процедуру после каждого оператора:

Sub Trap
    If Err Then
        WScript.Echo "0x" & Hex(Err.Number) & ": " & Err.Description
        Err.Clear
    End If
End Sub

On Error Resume Next
intDivideByZero   : Trap
floatDivideByZero : Trap
On Error Goto 0
Другие вопросы по тегам