3 回答

TA貢獻1810條經驗 獲得超4個贊
顯然,這是唯一的答案是“取決于”的問題之一。
它主要取決于您在哪里捕獲異常。通常,庫應該在捕獲異常時更加保守,而在程序的頂層(例如,在主方法中或在控制器的action方法的頂部等)中,捕獲的內容可以更加自由。
這樣做的原因是,例如,您不想捕獲庫中的所有異常,因為您可能掩蓋了與庫無關的問題,例如“ OutOfMemoryException”,您實際上更喜歡冒泡,以便用戶可以另一方面,如果您正在談論的是在main()方法中捕獲異常的方法,該方法捕獲異常,先顯示該異常,然后退出...好吧,在這里捕獲幾乎所有異常都是安全的。
捕獲所有異常的最重要規則是,您絕不應該默默地吞下所有異常……例如,Java中這樣的代碼:
try {
something();
} catch (Exception ex) {}
或在Python中:
try:
something()
except:
pass
因為這些可能是一些最難追蹤的問題。
一個好的經驗法則是,您應該只捕獲可以正確處理的異常。如果您不能完全處理異常,則應讓它冒犯給可以處理的人。

TA貢獻1801條經驗 獲得超8個贊
除非您在應用程序的前端進行一些日志記錄和清理代碼,否則我認為捕獲所有異常是不好的。
我的基本經驗法則是捕獲您期望的所有異常,而其他任何東西都是錯誤。
如果您抓住了一切并繼續前進,那有點像在汽車儀表板上的警告燈上貼上膏藥。您再也看不到了,但這并不意味著一切都OK。

TA貢獻1772條經驗 獲得超6個贊
是! (除了您應用程序的“頂部”)
通過捕獲異常并允許代碼執行繼續,您表示您知道如何處理和規避或解決特定問題。您是在說這是可恢復的情況。捕獲Exception或SystemException意味著您將捕獲諸如IO錯誤,網絡錯誤,內存不足錯誤,代碼丟失錯誤,空指針取消引用之類的問題。說您可以處理這些是一個謊言。
在一個組織良好的應用程序中,這些不可恢復的問題應在堆棧中較高的位置處理。
另外,隨著代碼的發展,您不希望函數捕獲新的異常,該異常將來會添加到被調用的方法中。
添加回答
舉報