2008-10-01 8 views
71

Hataları yakalamak ve bunları kaydetmek için VBScript kullanmak istiyorum (yani "bir şeyleri günlüğe kaydet") ve komut dosyasının sonraki satırına devam et. Örneğin VBScript - Hata işleme kullanma

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

bir hata 1. adımda, bunu daha sonra 2. adımda bu mümkün mü devam hatayı log (ya da onunla başka özel işlevleri yerine) istediğiniz oluşursa

? ve bunu nasıl uygulayabilirim?

DÜZENLEME: Böyle bir şey yapabilir miyim?

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

myErrCatch: 
'log error 
Resume Next 
+1

Dylan'ın yanıtı, VB'nin hata işleme bölümünde aldığı kadar iyi. Bu yüzden her zaman onunla kaçabileceğim zaman Javascript kullandım. – wcm

cevap

134

VBScript atma veya özel durumları yakalamak bir bağı yoktur, ancak çalışma zamanı gerçekleştirilen son operasyonda sonuçlarını içeren küresel bir Err nesnesi sağlar. Her işlemden sonra Err.Number özelliğinin sıfır olmadığını kontrol etmelisiniz.

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 [etiket]" sözdizimi Applications (VBA) Visual Basic ve Visual Basic tarafından desteklenen, ancak olarak On Error Resume Next kullanmak zorunda VBScript bu dil özelliği desteklemiyor Yukarıda tarif edilen.

+9

:(... Çok kötü sanırım ... – apandit

+2

WScript.Echo'yu, bir İşlev veya Alt'ı çağırmak için If ifadesi içinde değiştirebilirdiniz; bu da uygulamadan çıkıp, günlük kaydını kapatabilir. – StormPooper

+0

"reuslts içeriyor Son işlemin gerçekleştirilmesi ". Bu doğru mu? Son hatayı büyük bir fark olarak görüyor gibi görünüyor. –

6

On Error Resume Next'un global olarak ayarlanmadığını unutmayın. Güvenli olmayan kod parçanızı, örneğin, bir hata oluştuğunda hemen kesilecek olan bir işleve koyabilirsiniz ve bu işlevi OERN nümerik emsali içeren alt listeden arayabilirsiniz.

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

En açık değil Şimdiye kadar gördüğüm bol ama kavramı alıyorum. – Lankymart

+4

@Lankymart, daha sonra gördüğünüz daha net bir örneği veya bunun yerine omegastriplerin bu örneği nasıl geliştirebileceğini önerir misiniz? – Dominick

+2

Bir saniye için "omegastripes" lol adlı yeni bir yazılım mühendisliği paradigmasını kaçırdığım izlenimini aldım – TheBlastOne