none
"Not Rethrowing Exceptions Properly" by Patrick Steele RRS feed

  • 一般討論

  • visual studio magazine中的一篇 

    The Good, Bad and Ugly of C#

    http://visualstudiomagazine.com/Articles/2010/10/01/The-Good-Bad-and-Ugly-of-C.aspx?Page=1

    Steele 提出 Rethrowing Exceptions是不好的,

    他的理由是: 

    1. Exception handling in the .NET Framework is very robust

    2. If you don't do it the right way, you can lose important stack-trace information.

    可是我們往往為了提供引用者有更多的例外資訊而建立或 re-throwing exceptions,

    當然我是沒有考慮到 robust 的 issue

    在訪客的common中有人提出類似的想法, 如下:

    WED, OCT 6, 2010VISITOR

    I don't think catch (Exception) is something bad. There simply are scenarios when I don't care about the type of exception that is thrown. You have to thrust developers that they know when it's most appropriate to use certain features of the language.

     

    不知各位先進, 有什麼看法

     

    2010年10月20日 上午 02:14

所有回覆

  • 我個人認為是看實際狀況, 他也提到 "Right Way", 很多東西的存在未必是絕對的好或壞, 只是應用上正不正確的問題.

    就是多執行緒一樣, 我們會利用多執行緒來完成一些並行或非同步的工作,藉以發揮硬體資源的功效, 但不正確的多執行緒寫法卻會拖垮系統.

    另一個例子是, 許多非.Net 開發者都說在.Net 開發程式最大的問題就是使用Visual Studio開發太方便, 導致很多人在畫面上拖拉來拖拉去就以為自己會寫程式,

    這些人偏執地據此批評 Visual Studio是個不好的工具, 但事實並非如此, 因為若照他們的看法, 那最好的程式編輯工具其實是 vi 或 PE2, 真正的問題出在寫程式的人怎麼運用Visual Studio與.Net Framework, 而不是工具本身.

    我覺得該文作者強調的應該是 "不濫用", 而不是 "不用", 畢竟 CLR與.Net Framework也不是完美的, 有些看似正常又簡單的程式, 可能在多次運作後會發生你意想不到的Execption, 如果是這樣的Execption, 在你撰寫程式的時候根本不會想到.

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年10月20日 上午 04:43
    版主
  • To Bill Chung

    有同感, 我最大的疑點是Steele 提出較不佳的例子:

    if( amount < 0)

    {
    	throw new ArgumentException(
          "amount to deposit can not be negative", "amount");
    }
    卻是經常在程式碼中實作的, 

    一般在寫method時, 
    不是都會先考量, 什麼樣的參數會傳入, 
    如: 參數若是字串則可能是null, null對邏輯的影響, 那null是否可視為空白呢
    若不行, 應該要回傳null或是throw new Exception給引用者處理呢 ...
    若我希望引用者一定要注意這個參數不能是null, 
    則會throw 一個 exception 並給予合適的訊息.


    2010年10月20日 上午 05:26
  • 有些時候寫文是這樣, 作者會用強烈一點的舉證, 以便於突顯問題的存在. 狀況會發生在看文的人怎麼解釋他的意涵. 大概就是如此囉.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年10月20日 上午 06:08
    版主
  • To Bill Chung

    原來如此 , 感恩

    2010年10月20日 上午 10:21
  • 有些場合是需要將所發生的Exception包裝成另外的例外型態再抛出, 為的是隱藏內部的敏感例外資訊, 或是將例外資訊改寫成對使用者較友善的用語
    2010年10月21日 上午 01:28