Normalerweise würde ich das tun:
try
{
code
code that might throw an anticipated exception you want to handle
code
code that might throw an anticipated exception you want to handle
code
}
catch
{
}
Gibt es irgendwelche Vorteile, wenn man es so macht?
code
try
{
code that might throw an anticipated exception you want to handle
}
catch
{
}
code
try
{
code that might throw an anticipated exception you want to handle
}
catch
{
}
code
Aktualisieren:
Ich habe diese Frage ursprünglich mit Verweis auf C # gestellt, aber wie A. Levy kommentierte, kann sie für jede Ausnahmebehandlungssprache gelten, sodass die Tags dies widerspiegeln.
exception-handling
Steve
quelle
quelle
Antworten:
Es hängt davon ab, ob. Wenn Sie eine spezielle Behandlung für bestimmte Fehler bereitstellen möchten, verwenden Sie mehrere Fangblöcke:
try { // code that throws an exception // this line won't execute } catch (StackOverflowException ex) { // special handling for StackOverflowException } catch (Exception ex) { // all others }
Wenn jedoch eine Ausnahme behandelt und die Ausführung fortgesetzt werden soll, platzieren Sie den Code in separaten Try-Catch-Blöcken:
try { // code that throws an exception } catch (Exception ex) { // handle } try { // this code will execute unless the previous catch block // throws an exception (re-throw or new exception) } catch (Exception ex) { // handle }
quelle
Wenn ich die zweite wählen könnte, würde ich dies wahrscheinlich in zwei Funktionen aufteilen.
quelle
Verwenden Sie auch nicht einfach mehrere Catch-Blöcke für bestimmte Ausnahmen (es sei denn, der Block enthält nur eine Tonne Code und nur ein paar Zeilen können eine Ausnahme auslösen. In diesem Fall würde ich die zweite Methode verwenden).
quelle
Du denkst falsch darüber nach. Was müssen Sie in Ihren Fangblöcken tun? Wenn Sie eine der möglichen Ausnahmen wiederherstellen würden , indem Sie denselben Code ausführen, unabhängig davon, welche Operation die Ausnahme ausgelöst hat, verwenden Sie einen catch-Block. Wenn Sie je nach geworfener Operation unterschiedliche Bereinigungsvorgänge ausführen müssen, verwenden Sie mehrere Fangblöcke.
Wenn Sie try / finally oder das RAII- Muster anstelle von try / catch verwenden können, sollten Sie dies auch tun.
quelle
Die zweite Methode ist meiner Meinung nach besser, weil Sie damit Fehler genauer erfassen können.
Es ist auch schlecht, den gesamten Code in einen großen Try / Catch-Block zu packen, wenn Ihre App ein Problem hat und abstürzt. Da Sie jedoch eine große generische Ausführung abgefangen haben, ist die Wahrscheinlichkeit geringer, dass Sie tatsächlich richtig damit umgehen können. Sie sollten bestimmte Teile in try catch haben, z. B. wenn Sie eine Datei lesen oder Benutzereingaben vornehmen. Auf diese Weise können Sie mit dieser Ausnahme besser umgehen
quelle
Ich bevorzuge die zweite Methode - sie erleichtert das Debuggen, die Fehlerbehandlung genauer und fließt auch gut in Ihre Unit-Tests ein.
quelle
Ich würde mich für die zweite Option entscheiden, aber wenn ich dieses Codemuster sehe, ist mein erstes Gefühl, darüber nachzudenken, es in mehrere Funktionen / Methoden aufzuteilen. Ob dies zu tun ist, hängt natürlich davon ab, was der Code tut;)
quelle
Dies hängt von der Art der Fehler ab, die in Ihrem Code auftreten.
Wenn die Behandlung dieser Fehler, die Sie ausführen werden, dieselbe ist, versuchen Sie es mit einem einzigen Versuch ... fangen Sie für diese Codegruppe. Sonst wird es zu langweilig.
Wenn die Fehler eine andere Behandlung erforderten, trennen Sie sie, weil Sie müssen.
Wenden Sie nicht für alle Fälle eine einzige Methode an. Das meiste Programmieren ist kontextspezifisch :)
Sie müssen ein Gleichgewicht zwischen "GUT / KOMPLEX" und "SCHLECHT / EINFACH" erreichen. Je mehr Sie codieren, desto weniger stecken Sie in einem solchen Dilemma fest :)
Viel Spaß beim Programmieren!
quelle
Zweite Methode. Wenn Sie den Code, der möglicherweise eine Ausnahme auslöst, von anderem Code trennen, bleibt der Abschnitt kleiner und einfacher zu verwalten, anstatt den gesamten Code zu verpacken, auch den, der keine Ausnahmen auslöst.
quelle
Es gibt Zeiten, in denen wir dem Benutzer einen bestimmten Fehler anzeigen möchten.
quelle
2. Weg, aber idealerweise Code Guards verwenden - Try / Catch kann teuer sein, wenn Sie eine Ausnahme abfangen.
quelle