2008-10-01 41 views
71

我想使用VBScript來捕獲錯誤並記錄他們(即在錯誤「登錄的東西」),然後恢復該腳本的下一行。的VBScript - 使用錯誤處理

例如,

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

當在步驟1中,我希望它來記錄錯誤(或與它執行其它自定義函數),然後在第2步中恢復這是可能發生錯誤?我該如何執行它?

編輯:我可以做這樣的事情?

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

myErrCatch: 
'log error 
Resume Next 
+1

Dylan的回覆與VB進入錯誤處理部門的結果差不多。這就是爲什麼我總是使用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 

了「錯誤轉到[標籤]」語法由Visual Basic和Visual Basic應用程序(VBA)的支持,而是讓你不得不使用上的錯誤繼續下一步如VBScript不支持這種語言特性如上所述。

+9

:(......太糟糕了,我猜...... – apandit 2008-10-01 15:12:34

+2

你可以在if語句中更改WScript.Echo調用一個函數或子,這可能反過來退出應用程序,記錄錯誤等 – 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