73 Stimmen

Was bewirkt die Anweisung "On Error Resume Next"?

Ich kam zu einigen VBScript-Beispielen, und ich sah die Anweisung On Error Resume Next grundsätzlich am Anfang des Drehbuchs.

Was bewirkt es?

9 Stimmen

Es handelt sich um eine sehr mächtige, aber gefährliche Syntax. Seien Sie sehr vorsichtig bei ihrer Verwendung.

3 Stimmen

Das macht jetzt mehr Sinn. Nach einigen Funktionen, die in einem Fehler enden können. Sie haben eine Funktion namens checkError nach ihnen.

6 Stimmen

Ja, es ist 2018, aber das ist immer noch gültig - On Error Resume Next ist so, als würde man sagen: "Ich denke, das Ding sollte funktionieren, aber wenn es nicht funktioniert, dann tut so, als ob es funktioniert". in Wirklichkeit bereitet das zukünftigen Betreuern viel Kopfzerbrechen. vermeiden Sie das um jeden Preis.

91voto

David Punkte 3439

Sie sagt dem Programm im Grunde, dass es bei einem Fehler einfach in der nächsten Zeile weitergeht.

51voto

Tmdean Punkte 8928

Es ist erwähnenswert, dass selbst wenn On Error Resume Next in Kraft ist, wird das Err-Objekt immer noch gefüllt, wenn ein Fehler auftritt, so dass Sie immer noch eine Fehlerbehandlung im C-Stil durchführen können.

On Error Resume Next

DangerousOperationThatCouldCauseErrors

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

On Error GoTo 0

24voto

Pierre-Alain Vigeant Punkte 21865

Wenn ein Fehler auftritt, wird die Ausführung in der nächsten Zeile fortgesetzt, ohne dass das Skript unterbrochen wird.

11voto

t0mm13b Punkte 33393

Das heißt, wenn ein Fehler in der Zeile auftritt, wird vbscript angewiesen, die Ausführung fortzusetzen, ohne das Skript abzubrechen. Manchmal ist die On Error folgt die Goto Etikett, um den Ablauf der Ausführung zu ändern, etwa so in einer Sub Codeblocks wissen Sie nun, warum und wie die Verwendung von GOTO kann zu Spaghetti-Code führen:

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

6voto

alfredo Punkte 785

Sie ermöglicht die Fehlerbehandlung. Das Folgende ist teilweise aus 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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X