2008-10-01 10 views
71

Quiero utilizar VBScript para detectar errores y registrarlos (es decir, en el error "registrar algo") y luego reanudar la siguiente línea de la secuencia de comandos.VBScript - Uso de la gestión de errores

Por ejemplo,

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

Cuando se produce un error en el paso 1, yo quiero que ingrese ese error (o realizar otras funciones personalizadas con él) y luego reanudar en el paso 2. ¿Es esto posible? y cómo puedo implementarlo?

EDIT: ¿Puedo hacer algo como esto?

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

myErrCatch: 
'log error 
Resume Next 
+1

La respuesta de Dylan es casi tan buena como la de VB en el departamento de manejo de errores. Es por eso que siempre usé Javascript cuando pude salirse con la tuya. – wcm

Respuesta

134

VBScript no tiene noción de tirar o la captura de 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 

El "On Error Goto [etiqueta]" sintaxis se apoya en Visual Basic y Visual Basic para Aplicaciones (VBA), pero VBScript no admite esta característica del lenguaje lo que tiene que utilizar On Error Resume Next como descrito arriba.

+9

:(... Que lástima, supongo ... – apandit

+2

Puede cambiar WScript.Echo dentro de la instrucción If para llamar a una Función o Sub, que a su vez podría salir de la aplicación, registrar el error, etc. – StormPooper

+0

"contiene los reutilizadores de la última operación realizada ". ¿Es cierto? Parece que se obtiene el último error, que es una gran diferencia. –

6

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 el precedente OERN instrucción.

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

No es el más claro ex Mucho que he visto pero entiendo el concepto. – Lankymart

+4

@Lankymart ¿te importaría vincular un ejemplo más claro que has visto en ese momento, o en su lugar, sugerir cómo omegastripes puede mejorar este ejemplo? – Dominick

+2

Por un segundo, me dio la impresión de que me perdí un nuevo paradigma de ingeniería de software llamado "omegastripes" lol – TheBlastOne

Cuestiones relacionadas