2008-10-01 6 views
71

Ich möchte VBScript verwenden, um Fehler abzufangen und sie zu protokollieren (dh bei Fehler "melde etwas") und dann die nächste Zeile des Skripts fortsetzen.VBScript - Fehlerbehandlung verwenden

Zum Beispiel

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

Wenn ein Fehler auftritt auf Schritt 1, ich will es, dass Fehler protokollieren (oder andere mit ihrem kundenspezifische Funktionen ausführt) werden dann im Schritt wieder aufnehmen 2. Ist das möglich? und wie kann ich es umsetzen?

EDIT: Kann ich so etwas tun?

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

myErrCatch: 
'log error 
Resume Next 
+1

Dylans Antwort ist in etwa so gut, wie VB in die Fehlerbehandlung kommt. Deshalb habe ich Javascript immer benutzt, wenn ich damit durchkommen konnte. – wcm

Antwort

134

VBScript hat keine Ahnung von Werfen oder Ausnahmen zu kontrollieren, aber die Laufzeit bietet ein globales Err-Objekt, das die Ergebnisse der letzten Operation enthält ausgeführt. Sie müssen explizit überprüfen, ob die Err.Number-Eigenschaft nach jeder Operation nicht null ist.

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 

Die "On Error Goto [label]" Syntax von Visual Basic und Visual Basic für Applikationen (VBA) unterstützt, aber VBScript diese Sprache Funktion nicht unterstützt, so dass Sie On Error verwenden müssen Resume Next als oben beschrieben.

+9

:(... Schade, ich denke ... – apandit

+2

Sie könnten WScript.Echo innerhalb der If-Anweisung ändern, um eine Funktion oder Sub aufzurufen, die wiederum die Anwendung beenden, den Fehler protokollieren usw. – StormPooper

+0

"enthält die Reuslts der letzten durchgeführten Operation ". Ist das wahr? Scheint wie es bekommt den letzten Fehler, der ein großer Unterschied ist. –

6

Beachten Sie, dass On Error Resume Next nicht global festgelegt ist. Sie können Ihren unsicheren Teil des Codes z. B. in eine Funktion einfügen, die sofort unterbrochen wird, wenn ein Fehler auftritt, und diese Funktion von einem Sub aufrufen, das eine Präzedenzfall-OERN-Anweisung enthält.

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 
+0

Nicht die klarste ex reichlich, die ich je gesehen habe, aber ich bekomme das Konzept. – Lankymart

+4

@Lankymart Würdest du gerne ein deutlicheres Beispiel verlinken, das du damals gesehen hast, oder stattdessen vorschlagen, wie Omegastripes dieses Beispiel verbessern können? – Dominick

+2

Für eine Sekunde hatte ich den Eindruck, dass ich ein neues Software-Engineering-Paradigma namens "Omegastripes" lol vermisste – TheBlastOne