Что делает оператор «On Error Resume Next»? - PullRequest
58 голосов
/ 04 февраля 2010

Я пришел к некоторым примерам VBScript и увидел утверждение On Error Resume Next в основном в начале сценария.

Что это делает?

Ответы [ 7 ]

76 голосов
/ 04 февраля 2010

Это в основном сообщает программе, когда вы столкнулись с ошибкой, просто продолжайте на следующей строке.

38 голосов
/ 05 февраля 2010

Стоит отметить, что даже когда действует On Error Resume Next, объект Err по-прежнему заполняется при возникновении ошибки, поэтому вы все равно можете выполнять обработку ошибок в стиле C.

On Error Resume Next

DangerousOperationThatCouldCauseErrors

If Err Then
    WScript.StdErr.WriteLine "error " & Err.Number
    WScript.Quit 1
End If

On Error GoTo 0
24 голосов
/ 04 февраля 2010

При возникновении ошибки выполнение будет продолжено на следующей строке без прерывания сценария.

12 голосов
/ 04 февраля 2010

Это означает, что когда в строке происходит ошибка, она говорит vbscript продолжить выполнение без прерывания сценария. Иногда On Error следует за меткой Goto для изменения потока выполнения, что-то вроде этого в блоке кода Sub, теперь вы знаете, почему и как использование GOTO может привести к коду спагетти:

Sub MySubRoutine()
   On Error Goto ErrorHandler

   REM VB code...

   REM More VB Code...

Exit_MySubRoutine:

   REM Disable the Error Handler!

   On Error Goto 0

   REM Leave....
   Exit Sub

ErrorHandler:

   REM Do something about the Error

   Goto Exit_MySubRoutine
End Sub
3 голосов
/ 29 июня 2015

On Error Statement - Указывает, что при возникновении ошибки времени выполнения управление переходит к оператору, который следует сразу за оператором. Как бы ни был заполнен объект Err (Err.Number, Err.Count и т. Д.)

2 голосов
/ 25 апреля 2017

Включает обработку ошибок. Следующее частично от https://msdn.microsoft.com/en-us/library/5hsw66as.aspx

' Enable error handling. When a run-time error occurs, control goes to the statement 
' immediately following the statement where the error occurred, and execution
' continues from that point.
On Error Resume Next

SomeCodeHere

If Err.Number = 0 Then
    WScript.Echo "No Error in SomeCodeHere."
Else
  WScript.Echo "Error in SomeCodeHere: " & Err.Number & ", " & Err.Source & ", " & Err.Description
  ' Clear the error or you'll see it again when you test Err.Number
  Err.Clear
End If

SomeMoreCodeHere

If Err.Number <> 0 Then
  WScript.Echo "Error in SomeMoreCodeHere:" & Err.Number & ", " & Err.Source & ", " & Err.Description
  ' Clear the error or you'll see it again when you test Err.Number
  Err.Clear
End If

' Disables enabled error handler in the current procedure and resets it to Nothing.
On Error Goto 0

' There are also `On Error Goto -1`, which disables the enabled exception in the current 
' procedure and resets it to Nothing, and `On Error Goto line`, 
' which enables the error-handling routine that starts at the line specified in the 
' required line argument. The line argument is any line label or line number. If a run-time 
' error occurs, control branches to the specified line, making the error handler active. 
' The specified line must be in the same procedure as the On Error statement, 
' or a compile-time error will occur.
0 голосов
/ 16 августа 2016

On Error Resume Next означает, что при ошибке, он возобновит переход к следующей строке.

например. если вы попробуете блок Try, скрипт остановится, если произошла ошибка

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