vbscript error-handling

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.