2008-10-01 10 views
71

Je souhaite utiliser VBScript pour intercepter les erreurs et les consigner (c'est-à-dire en cas d'erreur "consigner quelque chose"), puis reprendre la ligne suivante du script.VBScript - Utilisation de la gestion des erreurs

Par exemple,

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

Lorsqu'une erreur se produit à l'étape 1, je veux que ce journal que l'erreur (ou effectuer d'autres fonctions personnalisées avec elle), puis reprendre à l'étape 2. Est-ce possible? et comment puis-je l'implémenter?

EDIT: Puis-je faire quelque chose comme ça?

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

myErrCatch: 
'log error 
Resume Next 
+1

La réponse de Dylan est à peu près aussi bonne que VB obtient dans le département de gestion des erreurs. C'est pourquoi j'ai toujours utilisé Javascript quand je pouvais m'en tirer. – wcm

Répondre

134

VBScript n'a aucune idée de lancer ou d'attraper des exceptions, mais le moteur d'exécution fournit un objet global Err qui contient les résultats de la dernière opération effectuée. Vous devez vérifier explicitement si la propriété Err.Number est différente de zéro après chaque opération.

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 [label]" syntaxe est prise en charge par Visual Basic et Visual Basic pour Applications (VBA), mais VBScript ne prend pas en charge cette fonction de la langue, donc vous devez utiliser On Error Resume Next comme décrit ci-dessus.

+9

:(... Dommage, je suppose ... – apandit

+2

Vous pouvez changer WScript.Echo dans l'instruction If pour appeler une fonction ou un sous, ce qui pourrait à son tour quitter l'application, enregistrer l'erreur, etc – StormPooper

+0

"contient le reuslts –

6

Notez que On Error Resume Next n'est pas défini globalement. Vous pouvez mettre votre partie dangereuse de code par exemple dans une fonction, qui sera interrompue immédiatement si une erreur se produit, et appelez cette fonction de sub contenant l'instruction précédente 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 
+0

Pas le plus clair ex amplement que j'ai jamais vu mais je reçois le concept. – Lankymart

+4

@Lankymart cela vous dérangerait-il de relier un exemple plus clair que vous avez vu à ce moment-là, ou plutôt de suggérer comment omegastripes peut améliorer cet exemple? – Dominick

+2

Pendant une seconde, j'ai eu l'impression de manquer un nouveau paradigme d'ingénierie logicielle appelé "omegastripes" lol – TheBlastOne

Questions connexes