VBScript-Uso de manejo de errores
error-handling (2)
Tenga en cuenta que On Error Resume Next
no está configurado globalmente. Puede poner su parte insegura de código, por ejemplo, en una función, que se interrumpirá inmediatamente si se produce un error, y llamar a esta función desde el sub que contiene la instrucción OERN
precedente.
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
Quiero usar VBScript para detectar errores y registrarlos (es decir, en el error "registrar algo") y luego reanudar la siguiente línea del script.
Por ejemplo,
On Error Resume Next ''Do Step 1 ''Do Step 2 ''Do Step 3
Cuando se produce un error en el paso 1, quiero que registre ese error (o realice otras funciones personalizadas con él) y luego reanude en el paso 2. ¿Es esto posible? y cómo puedo implementarlo?
EDITAR: ¿Puedo hacer algo como esto?
On Error Resume myErrCatch ''Do step 1 ''Do step 2 ''Do step 3 myErrCatch: ''log error Resume Next
VBScript no tiene la noción de arrojar o capturar excepciones, pero el tiempo de ejecución proporciona un objeto Err global que contiene los resultados de la última operación realizada. Debe comprobar explícitamente si la propiedad Err.Number no es cero después de cada operación.
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
La sintaxis "On Error Goto [label]" es compatible con Visual Basic y Visual Basic para Aplicaciones (VBA), pero VBScript no admite esta función de idioma, por lo que debe utilizar On Resume Resume Next como se describe arriba.