Frage

Ich möchte VBScript verwenden, um Fehler abzufangen und melden sie (dh auf Fehler „log etwas“), dann die nächste Zeile des Skripts wieder aufzunehmen.

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 etwas tun

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

myErrCatch:
'log error
Resume Next
War es hilfreich?

Lösung

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 prüfen, ob die Err.Number Eigenschaft nicht Null nach jeder Operation.

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 wird, aber VBScript diese Sprache nicht Funktion unterstützen, so dass Sie On Error verwenden müssen Resume Next, wie oben beschrieben.

Andere Tipps

Beachten Sie, dass On Error Resume Next nicht global gesetzt. Sie können Ihren unsicheren Teil des Codes zum Beispiel in eine Funktion setzen, die sofort unterbrochen werden, wenn der Fehler auftritt, und rufen Sie diese Funktion aus Unter Präzedenzfall OERN Anweisung enthalten.

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

Ich bin außergewöhnlich neu zu VBScript, so dass diese nicht am beste Praxis oder es in Betracht gezogen werden kann, kann ein Grund sein, es sollte nicht dies so gemacht werden, ich bin noch nicht bekannt, aber das ist die Lösung, die ich kam mit trimmen die Menge der Fehlerprotokollierung Code in meinem Haupt-Codeblock nach unten.

Dim oConn, connStr
Set oConn = Server.CreateObject("ADODB.Connection")
connStr = "Provider=SQLOLEDB;Server=XX;UID=XX;PWD=XX;Databse=XX"

ON ERROR RESUME NEXT

oConn.Open connStr
If err.Number <> 0 Then : showError() : End If


Sub ShowError()

    'You could write the error details to the console...
    errDetail = "<script>" & _
    "console.log('Description: " & err.Description & "');" & _
    "console.log('Error number: " & err.Number & "');" & _
    "console.log('Error source: " & err.Source & "');" & _
    "</script>"

    Response.Write(errDetail)       

    '...you could display the error info directly in the page...
    Response.Write("Error Description: " & err.Description)
    Response.Write("Error Source: " & err.Source)
    Response.Write("Error Number: " & err.Number)

    '...or you could execute additional code when an error is thrown...
    'Insert error handling code here

    err.clear
End Sub

Sie können Ihre Schritte Funktionen aufruft, in einer Fassade Funktion neu zu gruppieren:

sub facade()
    call step1()
    call step2()
    call step3()
    call step4()
    call step5()
end sub

Dann lassen Sie Ihre Fehlerbehandlung in einer oberen Funktion sein, die die Fassade aufruft:

sub main()
    On error resume next

    call facade()

    If Err.Number <> 0 Then
        ' MsgBox or whatever. You may want to display or log your error there
        msgbox Err.Description
        Err.Clear
    End If

    On Error Goto 0
end sub

Nun, nehmen wir an, step3() einen Fehler auslöst. Da facade() Fehler nicht behandelt (es ist nicht On error resume next in facade()), wird der Fehler zurückgegeben werden, um main() und step4() und step5() nicht ausgeführt werden.

Ihre Fehlerbehandlung wird nun in 1 Codeblock Refactoring

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top