Wenn ich versuchen, fangen Blöcke, wenn eine Ausnahme ist wirft die Programmausführung wird gestoppt, nachdem der Fang behandelt wird. Aber ich muss die Programmausführung fortsetzen, selbst wenn eine Ausnahme vorliegt. Kann mir jemand helfen, wie es geht?Fortfahren Programmausführung auch nach Versuch fangen
Antwort
Wenn ich es richtig verstehe, ist hier, was Sie wollen:
try
{
Statement1(); // <-- Exception is thrown in here
Statement2(); // <-- You want to go here after the catch block executes
}
catch
{
HandleException();
}
Try/Catch-Blöcke nicht so. Sie müssten Ihren Code neu zu schreiben, wie folgt statt:
try
{
Statement1();
}
catch
{
}
try
{
Statement2();
}
catch
{
}
Wenn Sie die Ausnahme behandeln und sie nicht (oder eine andere Ausnahme) von Ihrem catch
Block zurückwerfen, sollte Ihr Programm fortgesetzt werden.
Zusätzlich, wenn Sie Ausnahmen von einem bestimmten Typ abfangen (sagen IO Ausnahmen), aber der Code in try
Block wirft einen anderen Typ (sagen Sie eine SQL-Ausnahme), Ihre catch
Block mit nicht fangen Sie es und die Ausnahme wird aufblähen, bis das Programm beendet wird.
Was genau machst du in deinen catch
Blöcken?
Wenn Sie Funktion sprechen (nicht-Programm) können Sie schließlich Ihre Funktion
try
{
}
catch(MyException ex)
{
}
finally
{
// other code to be done
}
weiterhin verwenden, aber wenn Sie Programmabstürze zu sagen, die cach
ohne irgendein Argument kann damit umgehen.
Nicht abgefangene Ausnahmen beenden die Ausführung.
Wenn eine Ausnahme abgefangen und nicht erneut ausgelöst wird, wird die catch() -Klausel ausgeführt, dann die finally() -Klausel (falls es eine gibt) und die Ausführung wird mit der Anweisung nach dem try/catch/finally-Block fortgesetzt.
Wenn eine Ausnahme abgefangen und erneut ausgelöst wird, wird die catch() -Klausel bis einschließlich der throw-Anweisung ausgeführt. Die finally() - Klausel (falls es eine gibt) wird ausgeführt), dann wird die Exception geworfen (neu) und der Stack-Abbau wird fortgesetzt.
Da der Aufrufstapel abgewickelt wird, werden finally() -Klauseln ausgeführt, da sie den Gültigkeitsbereich verlassen und Dispose() wird aufgerufen, wenn Variablen deklarieren, wenn Anweisungen verwendet werden.
Was nicht passiert, ist, dass die Kontrolle nicht an dem Punkt fortgesetzt wird (und kann), an dem die ursprüngliche Ausnahme ausgelöst wurde. Es scheint, als würden Sie auf hoher Ebene Ausnahmen abfangen - wie beispielsweise Ihre Main() -Methode - und erwarten, dass die Ausführung an der ursprünglichen Fehlerstelle fortgesetzt wird.
Um dies zu erreichen, müssen Sie die Ausnahme an dem Punkt abfangen, an dem die Behandlung im Kontext sinnvoll ist, und nach dem Behandeln der Ausnahme entweder die fehlgeschlagene Operation wiederholen oder das Problem ignorieren.
Es ist ziemlich schwierig, die Ausnahmebehandlung gut zu machen; daher das Diktum, dass die beste Behandlungspraxis für Ausnahmen darin besteht, nicht damit umzugehen. Ausnahmen sollen genau das sein: außergewöhnlich. Dein Code sollte keine Ausnahme als normale Sache auslösen; noch sollten Sie Ausnahmen generell als Validierungstechnik oder als Kontrollflussoperator verwenden.
Ja, tatsächlich. Trickfrage: Was ist der Unterschied zwischen den folgenden zwei Try/Catch-Blöcken? versuchen { ... } catch (Exception e) { ... } und versuchen { ... } fangen { ... } –
- 1. Ausnahmebehandlung Versuch Fangen in Fangen
- 2. Multiplizieren verschachtelten Versuch-fangen
- 3. Versuch, unerwarteten Token zu fangen
- 4. Toast im Versuch/Fangen numberformatexception
- 5. Mehrere Versuch-fangen oder eins?
- 6. Ich kann Facebookexceptions in Versuch fangen Block
- 7. NSWindowController + Programmausführung
- 8. Erfordert eine Transaktion einen Versuch zu fangen?
- 9. Javascript Fehler bei Versuch Umgang .. fangen .. endlich
- 10. PHP versuchen zu fangen: Variable in Versuch
- 11. Diashow anhalten und nach 3 Sekunden fortfahren
- 12. pgpoolAdmin konnte nach Schritt 2 nicht fortfahren
- 13. Programmausführung durch das Betriebssystem
- 14. C# Pause Programmausführung
- 15. Versionsüberprüfung bei der Programmausführung
- 16. Fluss weiter nach Ausnahme fangen
- 17. ein Verfahren bei der Ausführung sowohl der Versuch fangen scheitern
- 18. Versuch Fangen funktioniert nicht immer in Eiskaffee Skript
- 19. Return-Anweisung in Versuch fangen und wenn sonst Klausel
- 20. Stoppen Sie die Programmausführung nach einem bestimmten Zeitintervall
- 21. ExpectedException nicht abfangen Ausnahme, aber ich kann es mit Versuch fangen fangen
- 22. wie andere Jframe nach dem umgebenden Code mit Versuch öffnen und fangen
- 23. Toast in einem AlertDialog in einem Versuch/fangen
- 24. Wie Handhabungsfehler von json dekodieren durch Versuch und fangen
- 25. Was ist los mit diesem Versuch zu fangen?
- 26. Versuch Fangen funktioniert nicht in Gridview in ASP.net C#
- 27. Ist Versuch in einer Ansicht schlechte Praxis zu fangen?
- 28. File.Delete Verhinderungsmethode von Fortfahren
- 29. Methode extrahieren mit fortfahren
- 30. Eine direkte Umleitung nach/dev/tty fangen
Bitte geben Sie ein Codebeispiel ein und überlegen Sie, ob Sie die Anwendung von Finally verwenden können. –
Wenn Sie sagen "Ich muss das Programm fortsetzen ...", von wo genau?Aus der Anweisung, in der die Ausnahme ausgelöst wurde, oder nach dem try/catch-Block oder ...? –