Try-Catch-End Try dans VBScript ne semble pas fonctionner
Je suis essayant le code suivant:
Try ' DOESN'T WORK
Throw 2 ' How do I throw an exception?
Catch ex
'What do I do here?
End Try
Mais je reçois l'erreur Statement expected
dans la clause catch.
Est-ce que quelqu'un sait comment je peux attraper/lancer des exceptions dans VBScript en utilisant try/catch? (Je suis pas à la recherche de solutions avec On Error Do X
.)
4 réponses
VBScript n'a pas Try/Catch. (référence du langage VBScript . S'il avait essayé, il serait répertorié dans la section des déclarations.)
On Error Resume Next
est la seule gestion des erreurs dans VBScript. Désolé. Si vous voulez try / catch, JScript est une option. Il est pris en charge partout que VBScript est et a les mêmes capacités.
Gestion Des Erreurs
Une sorte de" style plus ancien " de gestion des erreurs nous est disponible dans VBScript, qui utilise On Error Resume Next
. Nous activons d'abord cela (souvent en haut d'un fichier; mais vous pouvez l'utiliser à la place de le premier Err.Clear
ci-dessous pour leur effet combiné), puis avant d'exécuter notre code de génération d'erreur possible, effacez les erreurs qui se sont déjà produites, exécutez le code de génération d'erreur possible, puis vérifiez explicitement les erreurs:
On Error Resume Next
' ...
' Other Code Here (that may have raised an Error)
' ...
Err.Clear ' Clear any possible Error that previous code raised
Set myObj = CreateObject("SomeKindOfClassThatDoesNotExist")
If Err.Number <> 0 Then
WScript.Echo "Error: " & Err.Number
WScript.Echo "Error (Hex): " & Hex(Err.Number)
WScript.Echo "Source: " & Err.Source
WScript.Echo "Description: " & Err.Description
Err.Clear ' Clear the Error
End If
On Error Goto 0 ' Don't resume on Error
WScript.Echo "This text will always print."
Ci-dessus, nous sommes il suffit d'imprimer l'erreur si elle s'est produite. Si l'erreur était fatale au script, vous pouvez remplacer le second Err.clear
par WScript.Quit(Err.Number)
.
Notez également le {[6] } qui désactive la reprise de l'exécution à l'instruction suivante lorsqu'une erreur se produit.
Si vous voulez tester le comportement pour savoir quand le Set
réussit, allez-y et commentez cette ligne ou créez un objet qui réussira, tel que vbscript.regexp
.
La directive On Error
n'affecte que la portée en cours d'exécution (current Sub
ou Function
) et n'affecte pas l'appel ou les étendues appelées.
Générer Des Erreurs
Si vous voulez vérifier une sorte d'état et ensuite déclencher une erreur à gérer par le code qui appelle votre fonction, vous utiliseriez Err.Raise
. Err.Raise
prend jusqu'à cinq arguments, Number
, Source
, Description
, HelpFile
, et HelpContext
. L'utilisation de fichiers d'AIDE et de contextes dépasse la portée de ce texte. Number
est un numéro d'erreur que vous choisissez, Source
est le nom de votre application / classe / objet / propriété erreur, et Description
est une courte description de l'erreur qui s'est produite.
If MyValue <> 42 Then
Err.Raise(42, "HitchhikerMatrix", "There is no spoon!")
End If
Vous pouvez ensuite gérer l'erreur soulevée comme indiqué ci-dessus.
Journal Des Modifications
Err.Clear
avant l'erreur éventuelle provoquant la ligne pour effacer toutes les erreurs précédentes qui peuvent avoir été ignorées.
On Error Resume Next
et Err.Clear
. Correction d'une certaine grammaire pour être moins maladroit. Ajout d'informations sur Err.Raise
. Formater.
Essayez Catch exists via une solution de contournement dans VBScript:
Class CFunc1
Private Sub Class_Initialize
WScript.Echo "Starting"
Dim i : i = 65535 ^ 65535
MsgBox "Should not see this"
End Sub
Private Sub CatchErr
If Err.Number = 0 Then Exit Sub
Select Case Err.Number
Case 6 WScript.Echo "Overflow handled!"
Case Else WScript.Echo "Unhandled error " & Err.Number & " occurred."
End Select
Err.Clear
End Sub
Private Sub Class_Terminate
CatchErr
WScript.Echo "Exiting"
End Sub
End Class
Dim Func1 : Set Func1 = New CFunc1 : Set Func1 = Nothing
Parfois, surtout lorsque vous travaillez avec VB, vous pouvez manquer des solutions évidentes. Comme je faisais les 2 derniers jours.
Le code qui génère une erreur doit être déplacé vers une fonction distincte. Et au début de la fonction, vous écrivez On Error Resume Next
. C'est ainsi qu'une erreur peut être "avalée", sans avaler d'autres erreurs. Diviser le code en petites fonctions séparées améliore également la lisibilité, le refactoring et facilite l'ajout de nouvelles fonctionnalités.