2008-10-01 4 views
71

VBScript를 사용하여 오류를 포착하고 오류를 기록 (예 : "log something") 한 다음 스크립트의 다음 줄을 다시 시작합니다. 예를 들어 VBScript - 오류 처리 사용

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

오류 1 단계, I는 그 다음 2 단계에서 이것이 가능 리줌 그 오류를 기록 (또는 그것과 다른 커스텀 기능을 수행) 할 발생

? 어떻게 구현할 수 있습니까?

편집 : 이렇게 할 수 있습니까?

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

myErrCatch: 
'log error 
Resume Next 
+1

딜런의 응답은 VB가 오류 처리 부서에 들어가는 정도입니다. 그래서 내가 도망 갈 수있을 때 항상 Javascript를 사용했습니다. – wcm

답변

134

VBScript를 던지는 예외를 잡기의 아무 개념이없는,하지만 런타임은 마지막으로 수행 된 작업의 결과를 포함하는 글로벌 Err 개체를 제공합니다. 각 작업 후에 Err.Number 속성이 0이 아닌지 여부를 명시 적으로 확인해야합니다.

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 오류 고토 [레이블]"구문은 VBA (Visual Basic for Applications)를 및 Visual Basic에서 지원되지만이 같은 다음 다시 시작 오류에 사용 할 수 있도록 VBScript를이 언어 기능을 지원하지 않습니다 전술 한 바와.

+9

:(... 너무 나쁘다고 생각합니다 ... – apandit

+2

함수 또는 하위를 호출하기 위해 If 문 내에서 WScript.Echo를 변경하면 응용 프로그램을 종료하고 오류를 기록 할 수 있습니다. – StormPooper

+0

"reuslts 큰 차이가있는 마지막 오류가있는 것처럼 보입니다. –

6

On Error Resume Next은 전체적으로 설정되지 않습니다. 안전하지 않은 코드 부분을 함수에 넣을 수 있습니다.이 함수는 오류가 발생하면 즉시 중단되며 선행 기술 OERN 문을 포함하는 하위에서이 함수를 호출합니다.

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

가장 명확한 예는 아닙니다. 충분히 보았지만 개념을 얻었습니다. – Lankymart

+4

@Lankymart는 당신이 본 적이있는 더 명확한 예를 연결해 주시겠습니까? 아니면 오메가 스트라이프가 어떻게이 예를 향상시킬 수 있는지 제안 하시겠습니까? – Dominick

+2

두 번째로, 나는 "omegastripes"라고 불리는 새로운 소프트웨어 공학 패러다임을 놓쳤다는 인상을 받았다. – TheBlastOne