你寫的Try Catch真的有必要麼?

2022-01-13 07:45:01 字數 1180 閱讀 3575

很多人喜歡用try...catch把每乙個方法都包裹起來,可是真的有必要麼?

為什麼要這樣做?我估計是大家被bug嚇怕了,生怕生產環境出現各種莫名其妙的錯誤,比如最經典的nullreferenceexception,可問題是你用try...catch包裹起來後錯誤是不會爆出來了,但是執行結果是你想要的麼?恐怕bug還在那裡,只是經過你的try...catch之後,bug更加難找了,原本你用vs除錯起來,直接就斷在了異常發生的地方,現在呢?你得一步步跟蹤過去。

這不是最主要的問題,最重要的問題是你在開發過程中隱藏了bug,如果當時你沒加這個try...catch,恐怕你早就發現這個bug了,因為程式壓根就跑不下去。

異常資訊應該由最上層的框架捕獲,比如mvc中有exceptionfilter,你可以在這裡記錄詳細日誌,別把黃頁拋給使用者就可以了。我想寫乙個try...catch的場景,但是居然一下子想不出來乙個很好的場景,因為真真需要寫try...catch的場景是很少的,你一旦想寫try...catch,首先想想你是不是在故意隱瞞bug.

反而我鼓勵大家寫throw exception,比如這種場景:

public void register(string username,string password)

public void register(string username,string password)

catch (exception)

}

理論上,雖然ui做了各種校驗,我們寫的register任然保持對引數的不信任,繼續拋異常而不是try..catch,這樣你是不是能提前發現ui沒有校驗的bug呢?

追加內容:很多同學對此文的結論難以接受,最有疑問的就是「try...catch可以記錄日誌,捕獲異常的詳細資訊,不會讓程式掛掉", 我需要重申的是:try...catch的作用不是用來記錄日誌的,任何框架都在頂層提供了捕捉異常的方案(純類庫除外):

以.net為例:

winform,可以:

mvc,可以寫exceptionfilter

webapi,可以寫exceptionhandler

這裡面拿到的exception都是帶整個stack記錄的,你可以用log4記錄下來,並不是有的同學說的只會拿到e.message這樣

建議:少寫try...catch,喜歡寫try...catch的朋友注意:你那90%的try...catch都是在坑隊友

你真的有工作經驗嗎?

你真的有工作經驗嗎?文 冷眉 每次離職你都是因為同乙個原由,每次的公升職申請,都被領導用差不多的評語婉拒,當你總是在同乙個坑里跌倒時,有沒有想過這樣乙個問題 你真的有工作經驗嗎?或者說,你算是乙個經驗豐富的職場人士嗎?很多人都會反駁 當然啊,我已經工作好幾年了,甚至十幾年。實際上,卻未必如此。我的遠...

你真的懂遞迴 或者 寫的好遞迴嗎

一 什麼是遞迴?1.遞迴是一種非常高效 簡潔的編碼技巧,一種應用非常廣泛的演算法,比如dfs深度優先搜尋 前中後序二叉樹遍歷等都是使用遞迴。2.方法或函式呼叫自身的方式稱為遞迴呼叫,呼叫稱為遞,返回稱為歸。3.基本上,所有的遞迴問題都可以用遞推公式來表示,比如 f n f n 1 1 f n f n...

你以為書中真的有黃金屋嗎?

前路漫漫 剛剛看了一些關於uml的部落格,不知不覺翻到別人機房重構的地方了。有點不淡定了。心急如焚啊,但是也清楚的知道心急吃不了熱豆腐。看了師哥師姐的部落格,他們在我們這個時候,基本也都是在說 哎呀,學不會啊,看不懂啊 之類的話。其實內心是有點小竊喜的。因為他們原來也像我們一樣,而不僅僅是我乙個人腦...