2008-10-01 7 views
71

Я хочу использовать VBScript, чтобы ловить ошибки и записывать их (т.е. при ошибке «log something»), а затем возобновить следующую строку скрипта.VBScript - Использование обработки ошибок

Например,

 
On Error Resume Next 
'Do Step 1 
'Do Step 2 
'Do Step 3 

При возникновении ошибки на шаге 1, я хочу, чтобы войти, что ошибка (или выполнения других функций с ним), а затем возобновить на шаге 2. возможно ли это? и как я могу его реализовать?

EDIT: Могу ли я сделать что-то вроде этого?

 
On Error Resume myErrCatch 
'Do step 1 
'Do step 2 
'Do step 3 

myErrCatch: 
'log error 
Resume Next 
+1

Ответ Дилана примерно такой же, как и у ВБ, в отдел обработки ошибок. Вот почему я всегда использовал Javascript, когда мне это удалось. – wcm 2008-10-01 14:23:33

ответ

134

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

On Error Resume Next 

DoStep1 

If Err.Number <> 0 Then 
    WScript.Echo "Error in DoStep1: " & Err.Description 
    Err.Clear 
End If 

DoStep2 

If Err.Number <> 0 Then 
    WScript.Echo "Error in DoStop2:" & Err.Description 
    Err.Clear 
End If 

'If you no longer want to continue following an error after that block's completed, 
'call this. 
On Error Goto 0 

"On Error Goto [метка]" синтаксис поддерживается Visual Basic и Visual Basic для приложений (VBA), но VBScript не поддерживает эту функцию языка, так что вы должны использовать On Error Resume Next, как описано выше.

+9

:(... Жаль, что я думаю ... – apandit 2008-10-01 15:12:34

+2

Вы можете изменить WScript.Echo в инструкции If, чтобы вызвать функцию или Sub, которая могла бы, в свою очередь, выйти из приложения, зарегистрировать ошибку и т. Д. – StormPooper 2013-03-21 15:08:57

6

Отметьте, что On Error Resume Next не установлен по всему миру. Вы можете поместить свою небезопасную часть кода, например, в функцию, которая будет немедленно прервана, если возникнет ошибка, и вызовите эту функцию из суба, содержащего прецедент OERN.

ErrCatch() 

Sub ErrCatch() 
    Dim Res, CurrentStep 

    On Error Resume Next 

    Res = UnSafeCode(20, CurrentStep) 
    MsgBox "ErrStep " & CurrentStep & vbCrLf & Err.Description 

End Sub 

Function UnSafeCode(Arg, ErrStep) 

    ErrStep = 1 
    UnSafeCode = 1/(Arg - 10) 

    ErrStep = 2 
    UnSafeCode = 1/(Arg - 20) 

    ErrStep = 3 
    UnSafeCode = 1/(Arg - 30) 

    ErrStep = 0 
End Function