VBScript - Использование обработки ошибок - PullRequest
77 голосов
/ 01 октября 2008

Я хочу использовать VBScript для перехвата ошибок и их регистрации (т. Е. При ошибке «что-то записать»), а затем возобновить следующую строку сценария.

Например,

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

Когда на шаге 1 возникает ошибка, я хочу, чтобы она регистрировала эту ошибку (или выполняла другие пользовательские функции с ней), а затем возобновляла на шаге 2. Возможно ли это? и как я могу это реализовать?

РЕДАКТИРОВАТЬ: Могу ли я сделать что-то вроде этого?

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

myErrCatch:
'log error
Resume Next

Ответы [ 3 ]

145 голосов
/ 01 октября 2008

VBScript не имеет представления о создании или перехвате исключений, но среда выполнения предоставляет глобальный объект Err, который содержит результаты последней выполненной операции. Вы должны явно проверять, является ли свойство Err.Number ненулевым после каждой операции.

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

Синтаксис «При ошибке Перейти к [метка]» поддерживается Visual Basic и Visual Basic для приложений (VBA), но VBScript не поддерживает эту языковую функцию, поэтому необходимо использовать On Error Resume Next, как описано выше.

8 голосов
/ 28 апреля 2015

Обратите внимание, что 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 голосов
/ 08 февраля 2019

Я исключительно новичок в VBScript, так что это может не считаться наилучшей практикой или может быть причина, по которой этого не следует делать таким образом, о котором я еще не знаю, но это решение, которое я придумала с помощью, чтобы сократить количество кода регистрации ошибок в моем основном блоке кода.

Dim oConn, connStr
Set oConn = Server.CreateObject("ADODB.Connection")
connStr = "Provider=SQLOLEDB;Server=XX;UID=XX;PWD=XX;Databse=XX"

ON ERROR RESUME NEXT

oConn.Open connStr
If err.Number <> 0 Then : showError() : End If


Sub ShowError()

    'You could write the error details to the console...
    errDetail = "<script>" & _
    "console.log('Description: " & err.Description & "');" & _
    "console.log('Error number: " & err.Number & "');" & _
    "console.log('Error source: " & err.Source & "');" & _
    "</script>"

    Response.Write(errDetail)       

    '...you could display the error info directly in the page...
    Response.Write("Error Description: " & err.Description)
    Response.Write("Error Source: " & err.Source)
    Response.Write("Error Number: " & err.Number)

    '...or you could execute additional code when an error is thrown...
    'Insert error handling code here

    err.clear
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...