Trap Fehler oder 'Resume Next'
Merke ich, dies ist eine ältere Programmier-Umgebung, aber ich habe zu bereinigen, einige VB6
code und ich finde, dass die meisten es verwendet:
On Error Resume Next
Was ist der Allgemeine Konsens über die Verwendung von On Error Resume Next
?
Sicher, wenn es ist ein Fehler, würden Sie wollen, die app zu stoppen, was er Tat, rollback alle änderungen der Daten und informieren den Benutzer über den Fehler, anstatt einfach fortsetzen.
Wann ist es eine gute Idee zu verwenden On Error Resume Next
?
- Siehe stackoverflow.com/questions/2062058/...
- Re-Lesen Sie Ihre Frage: "ich bin das finden die meisten es verwendet..." ist ein schlechtes Zeichen. Es gibt keinen guten Grund für den promiscuous Verwendung von On Error Resume Next.
- Q:Wann ist es eine gute Idee zu verwenden On Error Resume Next?A:wenn du ein vb6-geek.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich es nützlich gefunden, die in Funktionen, bei denen ein Fehler würde nicht garantieren dass der Benutzer unterbrochen mit der Frage. Ein gutes Beispiel ist das resize-Ereignis. Wenn Sie einen Fehler machen, oder es gibt ein problem in der resize-Ereignis aus, dann haben Sie wahrscheinlich nicht wollen, dass die Benutzer, um zu sehen, wie es wäre wahrscheinlich keine Auswirkungen auf die Funktionalität.
Ich würde sagen, in der Regel, verwenden Sie es sparsam.
On Error Resume Next
dreht sich ein kleiner Tippfehler in einen bösen bug, der zeigte nur, auf dem Rechner des Kunden und war schwierig zu Debuggen developerfusion.com/code/4325/...Resize
Methode ist in der Regel eine OK-Fall fürOn Error Resume Next
wie hier erwähnt. Es kann auch nützlich sein für Fälle, wo Sie nicht vermeiden können, wird ein Fehler ausgelöst wird, aber wollen behandeln es anders, wie wenn Sie versuchen, Zugriff auf ein nicht vorhandenes Element in einemCollection
. Da es keineExists
Methode auf dieCollection
Klasse, beim Zugriff auf ein Element in der Auflistung und fangen den entstehenden Fehler, ist der einzige Weg, um herauszufinden, ob das Element vorhanden ist oder nicht.On Error Resume Next
neigt dazu, werden die meisten nützlich, wenn Sie nicht wollen, um zu springen, um eine Reihe von verschiedenen error-handling labels in den code, in Fällen, in denen Sie möglicherweise haben, um eine Reihe von verschiedenen Fehlern, die an verschiedenen stellen im code.On Error Resume Next
können Sie schreiben, Ihre Fehler-handling logic "in der Folge" mit dem normalen code.On Error Resume Next
...Versuchen, etwas zu tun, dass möglicherweise Fehler aus...checkErr.Number
um zu sehen, ob ein Fehler aufgetreten ist und entsprechend behandeln...wiederholen.Ist es durchaus sinnvoll zu verwenden On Error Resume Next zur Umsetzung der lokalen strukturierte Fehlerbehandlung. Dies beinhaltet die Prüfung für eine Ausnahme und handeln auf Kurs, wie auch der Entwaffnung der Mechanismus danach. Beispiel:
Das ist nur ein einfaches Beispiel, wo nur eine Art von Ausnahme, zu erwarten ist. In einigen Fällen ist es notwendig, test-Err.Anzahl für spezifische Werte und verschiedene Aktionen auf Sie.
Den unstrukturierten Ansatz, der auf GoTo label können oft so gut funktionieren, aber es ist kaum superior in den meisten Fällen. In VBScript die oben gezeigten Muster ist die einzige form der Ausnahmebehandlung, die Sie selbst haben, da gibt es keine GoTos oder Etiketten.
Was zu beanstanden ist scharf ausdrückliche Ausnahme-Tests an der Spitze jedes Verfahren und ignorieren es... eine Art Vertrauen in die Kraft, Lukas Ansatz versucht, die Maske Codierung Fehler.
disarming the mechanism afterward
undon error goto 0
Wiedereinstellung es: DAS ist, wie es funktioniert! Die überprüfung für bestimmte Fehler-Nummern ist, IMHO, ziemlich viel wie fangen spezifische Ausnahmen in einem try...catch-block: durchaus akzeptabel, sofern gerechtfertigt.resume next
zu wechseln Fehlerbehandlung ausgeschaltet ist, führen Sie den Fehler-okay-Anweisung, klar, der erwarteten Fehler und wiederherstellen Fehlerbehandlung mitgoto errHandler
, woerrHandler
ist ein Etikett an der Unterseite des das Verfahren mit einemif err then
block so, dass dieser code nicht ausgeführt auf den normalen Ausführungspfad.Fast nie - es sei denn, bewusst zum Beispiel auf einer Linie, wo ein erfolgreicher Aufruf einen bestimmten Wert zurück, und der nachfolgende code verarbeitet, die Rückgabe Wert gerecht zu werden für die Fehler-Fall.