Ich verstehe, dass wenn catch von Objekt-Argument von Basis-Exception-Klasse abgeleitet ist, wird nur diese Ausnahme behandeln. Aber ich verstehe nicht, warum ich eine Variable dieses Typs deklarieren muss, das "Ex" oder was auch immer. Ich weiß, dass es mit dem Ausnahmeobjekt "gefüllt" wird, aber verstehe es einfach nicht gut.Ausnahmen: catch (Exception ex) Frage
Antwort
Sie haben keine haben, um eine Variable anzugeben. Zum Beispiel können Sie schreiben:
try
{
...
}
catch (IOException)
{
// Do something
}
aber Sie in der Regel die Ausnahme protokollieren wollen oder einige Maßnahmen ergreifen, die in irgendeiner Weise davon abhängt. (Protokollierung ist nach meiner Erfahrung bei weitem die am häufigsten verwendete Ausnahmevariable - oder sie wird als "innere Ausnahme" für eine neue Ausnahme verwendet.) Wie Sie dies tun, wird in der catch-Anweisung deklariert.
Wenn Sie keine Variable deklarieren, die die abgefangene Ausnahme enthält, wie analysieren Sie dann das ausgelöste Ausnahmeobjekt?
Wenn es Ihnen nicht egal ist, müssen Sie es nicht erklären. Aber im Allgemeinen ist es eine gute Idee, falls Sie etwas damit machen wollen.
Sie müssen keine Variable deklarieren. Sie können es wie dieses:
try
{
//something here...
}
catch (ThreadAbortException)
{
//handle only ThreadAbortException..
}
Sie es verwenden können mehr Informationen über die Ausnahme
("Exception Message: {0}", ex.Message) or
about inner exception, ex.InnerException;
Die Variable finden Informationen über die Ausnahme selbst, was am wichtigsten Nachrichtentext enthalten.
Wenn Sie nur die Ausnahme abfangen und bereinigen und beenden möchten, benötigen Sie sie möglicherweise nicht, aber im Allgemeinen möchten Sie dem Benutzer oder einer Protokolldatei die tatsächliche Fehlermeldung anzeigen, die in der Variablen enthalten ist für dich bevölkert.
try {
}
catch(SQLException){
//do something not using exception info
}
catch(OtherException ex){
//do something else using exception info
}
catch(Exception ex){
//do something else
Logger.Log(ex);
}
- 1. Gibt es eine Ausnahme, die catch (...) verarbeiten kann, während catch (exception & ex) nicht kann?
- 2. xcode catch exception NSRangeException
- 3. Try-Catch Exception Missbrauch
- 4. Anzeige Exception auf Try-catch-Klausel
- 5. Mule unterdrücken Catch-Exception-Strategie Protokollierung
- 6. Abfangen von Ausnahmen mit "catch, when"
- 7. Android - Get Variable in Catch Handle Exception
- 8. C++ Ausnahmen und Vererbung von std :: exception
- 9. C# WCF catch Fault Ausnahmen des Basistyps
- 10. Ausnahmen verlieren einen Teil von Stacktrace in Try/Catch-Kontext
- 11. python catch exception und continue try block
- 12. dieses PHP Exception Confused try..catch
- 13. Wird ein Unterklassen-Catch-Block eine überprüfte Parent-Exception fangen?
- 14. Welche Ausnahmen umgehen catch-Blöcke in .net
- 15. Catch JavaScript-Ausnahmen von WebView in iOS
- 16. Xamarin AdMob für Android - Catch-Ausnahmen
- 17. warning C4673: werfend 'ex :: traced_error <EX>' die folgenden Typen werden in der Catch-Site nicht berücksichtigt
- 18. Exception im try-Block werfen statt catch-Block?
- 19. Scala Try/Catch-Block in Scala schlägt fehl Exception
- 20. C++ - Ausnahmen werfen nach Wert catch by reference
- 21. Ist die Reihenfolge der Catch-Blöcke wichtig?
- 22. Exception Handling
- 23. F # Exception Filter
- 24. Spring Exception Handler alle Ausnahmen protokollieren, aber ursprüngliche Antwort zurückgeben
- 25. Karo Ungeprüfter Ausnahmen
- 26. In VB.NET mehrere Ausnahmen gleichzeitig erfassen
- 27. Java-Exception-Klassen
- 28. Httpclient - Umgang mit aggregierten Ausnahmen
- 29. Try-catch-finally und dann wieder einen Try-Catch
- 30. Try-Catch Wie Exception Handling in PL/SQL
@ Jon Skeet: Danke. Auch kann ich Typ als Argument oder Typ mit Variable verwenden, die dazu führen, dass diese Variable auf Instanz dieses Typs gesetzt wird? Ich müsste nur wissen, wie es terminologisch richtig ist>] – Loj
@Loj: Es ist nicht klar, was du meinst. Es ist kein "Argument", weil Sie keine Methode aufrufen. Es ist nur ein Teil der Syntax eines catch-Blocks. Sehen Sie sich die Spezifikation für weitere Details an. –
@ Jon Skeet: aber die MSDN-Spezifikation sagt: "Die Fangklausel kann ohne Argumente verwendet werden, in diesem Fall fängt es jede Art von Ausnahme und bezeichnet als die allgemeine Fangklausel. Es kann auch ein Objekt-Argument von System abgeleitet werden .Exception, in diesem Fall behandelt es eine bestimmte Ausnahme. "..Ich bin jetzt verwirrt – Loj