2010-11-10 59 views
3

所以當我在VBA/VB6中玩過很多時,我從來沒有深入過詳細的錯誤處理。大多數情況下,如果遇到用戶錯誤(例如他們的某些輸入未通過某種驗證測試),則彈出帶有一些錯誤信息和關鍵(或警告)圖標的MsgBox(),並安全地中止該代碼,並希望他們得到了線索。用戶錯誤拋出異常?或者更好地設計自定義錯誤消息框架?

在.NET中,我的閱讀基本上指出了異常作爲錯誤處理中的最終結果。在我看來,如果你知道一個用戶可能搞砸的代碼點,你應該試着用try ... catch塊(用於數據轉換之類的東西)來捕獲它,或者標準的如果... ...。 ..ELSE構造其他的東西,然後在需要時拋出一個新的異常。

從某種意義上講,不是拋出一個本質上是強制性程序崩潰的異常(當然,你可以選擇繼續)?或者是特別針對諸如數據轉換錯誤和其他「不應該發生的事情」這樣的事情設計的例外,並且恢復MsgBox()和朋友對次要用戶擰緊的使用?

考慮一下你只有一個TextBox的情況,該TextBox只能接受數字數據(或者只是一組特定的字符)。除了可以限制該字段的其他技巧(讓我們假設它是自由形式的,以編程方式),在每次鍵入無效字符時拋出新的異常,或者即使未發生錯誤檢查,也似乎有點浪費直到他們按下提交按鈕(如在網頁上)。在這種情況下彈出一個MsgBox()似乎更加理智。

那麼什麼是直接的異常和投入新的用戶錯誤?如果你的程序也暴露了一個程序框架,那麼怎麼樣?對編程功能之一的錯誤使用絕對看起來像是我的新異常領域。

回答

1

.NET中的異常當然可用於錯誤輸入,而不僅僅是不應該出錯的事情。無論如何,你不應該讓無用的例外交給用戶。

無論是「測試」輸入還是讓框架檢測到異常,您可能都會顯示一個MsgBox,因此它不會產生巨大差異。看起來異常通常很慢,您應該使用'if'語句來捕獲明顯的驗證錯誤,並依靠異常來捕獲更加模糊的場景。

+0

這是有道理的。只是在我閱讀的大部分時間裏,有時會建議拋出異常是錯誤處理的主要方式(儘管從來沒有直接說過)。我沒有遇到過在.NET中提供其他替代方法的文檔。我懷疑這是因爲許多作者可能認爲一般的.NET程序員已經熟悉處理錯誤。所以這給了我一些確認。 – Kumba 2010-11-10 19:24:01