處理異常的好方法是什么?
I無法協(xié)調(diào)“最佳實踐”和處理異常的實際方法。在我的日常生活中,我發(fā)現(xiàn)自己遇到了以下問題示例:try:do\u something()除了異常:log\u error()甚至try:do
解答動態(tài)
我們不知道應(yīng)該預(yù)期什么,而所有方法的行為都是相同的,e、 記錄并繼續(xù)執(zhí)行。對我來說,這是你的主要問題。如果發(fā)生異常而您不知道如何處理它,則不應(yīng)該繼續(xù)執(zhí)行,因為您不知道系統(tǒng)處于什么狀態(tài)。只需將它傳遞到下一個級別,并讓它處理它;在最頂層,您可能希望注銷異常,但這應(yīng)該是在頂層,因為已經(jīng)中止了正在進(jìn)行的任何其他工作。在這一點上,您將丟失大部分重復(fù)的異常處理,因為這些異常都是在頂層處理的。
如果有特定的異常您知道如何從中恢復(fù),那么絕對要捕獲特定的異常并具有適當(dāng)?shù)幕謴?fù)邏輯。但不要嘗試?yán),因為你實際上不知道在這種情況下出了什么問題,所以你不能正確地從中恢復(fù)過來。圖案比如:
try:do\u something()除了異常:log\u error() 在某些情況下并不罕見。如果do\u something是用戶提供的回調(diào)、請求處理程序或正在處理的工作單元,那么這種模式可能是合理的。當(dāng)您在這里捕獲到異常時,可能“執(zhí)行”某個操作已經(jīng)完成了它所能執(zhí)行的任何清理,您所需要做的只是記錄錯誤并轉(zhuǎn)到下一個工作單元。
但是,如果“執(zhí)行”某個操作不是“的”,則您可能會遇到麻煩。例如,如果do\u something負(fù)責(zé)執(zhí)行某項工作(例如,創(chuàng)建一個數(shù)據(jù)庫對象),那么在這里處理異常時,您可能無法知道該工作是否已完成。在這種情況下,繼續(xù)進(jìn)行通常是相當(dāng)危險的。
這種“一網(wǎng)打?鋇拇澩朐誑蚣苤蟹淺3<ǘ彝耆俠恚琁MO),框架可能調(diào)用未知和不相關(guān)的代碼,框架的正確運(yùn)行完全不取決于被調(diào)用方是成功還是失敗。另一方面,在應(yīng)用程序代碼中,這可能是一個錯誤- End
免責(zé)聲明:
本頁內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無關(guān)。本頁內(nèi)容僅供參考,請您根據(jù)自身實際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項,請咨詢專業(yè)人士處理。