13 Stimmen

Warum eine Ausnahme abfangen, nur um sie erneut auszulösen?

In einem Webservice sehe ich diesen Code:

<WebMethod()> _
Public Function dosomething() As Boolean
    Try
        If successful Then
            Return True
        Else
            Return False
        End If
    Catch ex As Exception
        Throw ex
    End Try
End Function

Welchen Sinn hat es, die Ausnahme abzufangen und sie einfach erneut zu werfen? Verpasse ich etwas?

Bearbeiten: Danke für die Antworten! Ich dachte, es war so etwas wie das, aber war nicht sicher, ob ich könnte/würde refactor diese weg ohne Auswirkungen.

47voto

GEOCHET Punkte 20824

Tun Sie das nicht.

Wenn Sie die Ausnahme unbedingt erneut auslösen müssen, verwenden Sie einfach throw; mit throw ex; löscht den Stack-Trace und ist absolut falsch.

15voto

Jack Ryan Punkte 8258

Mir fällt kein Grund ein, dies aus Gründen der Funktionalität zu tun. Es kann jedoch vorkommen, dass zuvor eine Fehlerbehandlung (in der Regel Protokollierung) vorhanden war, die entfernt wurde, und der Entwickler die Protokollierung entfernt, aber den Code nicht umstrukturiert hat, um die überflüssigen try/catch zu entfernen.

5voto

tvanfosson Punkte 506878

Wahrscheinlich handelt es sich um ein Stück Code, das vom Debugging übrig geblieben ist (Sie würden einen Haltepunkt auf den Throw setzen, damit Sie die Exception im Debugger untersuchen können). Ich könnte so etwas tun, wenn ich die Ausnahme protokollieren und dann die Kette weitergeben wollte, obwohl ich die Ausnahme wahrscheinlich in eine andere mit einer aussagekräftigeren (für meine Anwendung) Fehlermeldung verpacken würde.

5voto

jim Punkte 1432

Eine der Architekturen (Entwurfsmuster) Ich könnte mir vorstellen, dass diese Funktion verwendet wird, wenn eine Transaktion abgewickelt wird. Die Funktion macht ihre Arbeit, schlägt fehl und der Catch-Block schließt die Transaktion in einem bekannten Zustand ab (normalerweise ein Rollback) und löst dann eine benutzerdefinierte Ausnahme aus.

Überarbeiten Sie den Code so, wie er jetzt ist, und bringen Sie ihn in einen vernünftigen Zustand.

1voto

Jay Punkte 26044

Nicht nur das try/catch ist sinnlos, sondern auch das IF. Die gesamte Funktion könnte auf eine Zeile reduziert werden:

return successful

Warum sollte man sich dann noch die Mühe machen? Warum nicht einfach "erfolgreich" testen, anstatt die Funktion aufzurufen?

Nun, okay, es ist eine Web-Methode, ich schätze, Sie brauchen die Funktion nur, um Ajax oder wem auch immer eine Handhabe zu geben.

(Ja, mir ist bewusst, dass meine Antwort 7 Jahre zu spät kommt. Ich bin gerade darüber gestolpert, als ich nach etwas völlig anderem gesucht habe.)

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