1. 程式人生 > >結構化異常處理 與 非結構化異常處理 的區別

結構化異常處理 與 非結構化異常處理 的區別

簡單來說,

結構化異常處理是指使用包含異常的控制結構、隔離的程式碼塊和篩選器來建立異常處理機制。 

這樣,您的程式碼可以區分不同型別的錯誤,並根據環境做出相應的響應。

 在非結構化異常處理中,位於程式碼開頭的 On Error 語句處理所有異常。


----------------------------------------------------------------------------------------------------------------------------------------------

Visual Basic 支援結構化異常處理,您可以使用該處理建立和維護具有可靠、全面的錯誤處理程式的程式。 

結構化異常處理是旨在通過將控制結構(類似於 Select Case 或 While)與異常、受保護的程式碼塊和篩選器結合起來,在執行期間檢測和響應錯誤的程式碼。

- - - - - - - -- - - - - - - - - - -- - - - - - -- - - - - -- - - - -- - - - - -- - - - -- - - - -- - - -- - - - -- - - -- - - - -- - - -- - - -- - - -- - - - 

在“非結構化異常處理”中,您將 On Error 語句放在程式碼塊的開始處,它將處理在該塊內發生的任何錯誤。 如果在執行 On Error 語句後過程中引發了異常,

程式分支到 On Error 語句中指定的行引數。 行引數(行號或行標籤)指示異常處理程式的位置。


有時,從原始過程呼叫另一個過程,並且被呼叫過程中發生異常。 這種情況下,如果被呼叫過程不處理異常,則異常傳播回撥用過程,並且執行分支到行引數。
使用 On Error 的非結構化錯誤處理會降低應用程式的效能並導致程式碼難以除錯和維護。 建議使用結構化錯誤處理方法。

-------------------------------------------------------------------------------------------------------------------------------------------------


與非結構化異常處理相比,結構化異常處理的適用面更廣、更可靠,並且更靈活。 應儘可能地使用結構化異常處理。 

但在下列情況下,應使用非結構化異常處理:


升級用 Visual Basic 的早期版本編寫的應用程式。
開發應用程式的最初版本或草稿,並且不介意程式是否無法正常關閉。
您事先已經知道導致異常的原因。
時間緊迫,您需要走捷徑,也願意以犧牲靈活性為代價來爭取速度。
程式碼不太重要或非常短,只需對產生異常的程式碼分支進行測試。
需要使用 Resume Next 語句(結構化異常處理不支援該語句)。
在同一函式內,不能混用結構化和非結構化異常處理。 如果使用 On Error 語句,則在同一函式中不能使用 Try...Catch 語句。

無論您選擇哪種機制來處理程式碼內的異常,都必須退一步考慮該程式碼有哪些假設。 例如,如果您的應用程式要求使用者輸入電話號碼,則有以下假設:

使用者將輸入一個數字,而不是字元。
該數字有特定的格式。
使用者不會輸入空字串。
使用者只有一個電話號碼。


使用者的輸入可能會違反這些假設中的任何一個或全部。 可靠的程式碼需要足夠的異常處理機制,使應用程式在使用者的輸入違反這些假設時能夠正常恢復。

除非可以確保方法在任何情況下都不會引發異常,否則應考慮使用說明性異常處理。 異常處理應該是有意義的。

 除了指出有錯誤發生外,異常處理產生的資訊還應說明發生錯誤的原因和位置。 如果提供的資訊不具有說明性,而僅僅指出“發生錯誤”,只會使使用者感到更迷惑。