錯誤捕獲

運行時錯誤是無法避免的,一旦出現運行時錯誤,將造成程式崩潰,無法繼續執行,因此必須對運行時錯誤加以處理。處理運行時錯誤的過程稱為錯誤捕獲(Error Trapping)。

簡介

運行時錯誤是VB編程中的一種錯誤,應用程式正在運行期間,當一個語句試圖執行一個不能執行的操作時就會發生運行時錯誤。比較常見的有一個除法運算的除數為零,儘管在語法看來程式語句沒有錯誤,但在實際上這條語句不能執行。

程式運行中的錯誤,一旦出現將造成程式崩潰,無法繼續執行。因此我們必須對可能發生的運行時錯誤加以處理,也就是在系統發出警告之前,截獲該錯誤,在錯誤處理程式中提示用戶採取行動,是解決問題還是取消操作。如果用戶解決了問題,程式就能夠繼續執行,如果用戶選擇取消操作,則可以跳出這段程式,繼續執行後面的程式。這就是處理運行時錯誤的方法,這個過程稱為錯誤捕獲。

錯誤捕獲的轉向語句

Visual Basic提供的On Error語句是用來檢測運行過程中的錯誤,是處理可捕獲錯誤的基礎語句,該系列語句可啟動錯誤處理程式,也可用於禁止錯誤處理程式。如果不使用“On Error”系列語句,那么任何運行時錯誤都可能使程式崩潰,即顯示錯誤信息並中止運行。

On Error語句通常被置於事件過程中認為可能會出現錯誤的任何語句之前,當應用程式運行中遇到錯誤時,語句會告訴它轉向某錯誤處理分枝語句進行處理。每個錯誤處理程式都有自己的標號,跟一個冒號以供辨認,例如ErrorHandlerl:或WinsockError:。每個錯誤處理程式包含兩個部分:第一部分通常是在一個分枝結構(例如If...Th T或Select Case語句)中使用Err. Number屬性進行判斷,然後藉助Err. Description屬性顯示一條用戶信息或根據錯誤類型設定某個屬性;第二部分是Resume語句,該語句將控制權返回給程式,使程式得以繼續運行。

On Error GoTo Line語句

該語句用於啟動錯誤處理程式,且程式需從必要的“line”參數中指定的位置開始。"line"參數可為任何行標或行號。如發生運行時錯誤,即出現了可捕獲的錯誤時,則程式會跳轉至"line"處並激活錯誤處理程式。需注意,指定的“line"參數必須和On Error語句在一個過程中,否則會發生編譯錯誤。

0n Error Resume Next語句

該語句的功能是忽略錯誤,繼續往下執行。它激活錯誤捕獲功能,但並不指定錯誤處理程式。當發生錯誤時,不做任何處理,直接執行產生錯誤的下一行程式。該語句會使程式從緊隨產生錯誤的語句之後的語句繼續執行,或是從緊隨最近一次調用含有On Error Resume Next語句過程的語句繼續運行。這個語句可以置運行時錯誤於不顧,使程式得以繼續執行。此時,可以將錯誤處理程式放置在錯誤發生的地方,而不必傳遞到過程中的其他位置。在調用另一個過程時,On Error Resume Next語句成為非活動的,所以如果希望在例程中進行嵌入錯誤處理,則應在每一個調用的例程中執行On Error Resume Next語句。

0n Error GoTo 0語句

此語句用來強制性取消捕獲功能,錯誤捕獲功能一旦被激活,就停止程式的執行。如果要關閉錯誤捕獲,使用該語句。如果在過程中激活了錯誤捕獲,則當過程完成執行時,錯誤捕獲會自動無效。但是,當過程中的代碼一直在執行時,想要關閉過程中的錯誤捕獲,就應使用該語句。

錯誤處理程式

錯誤處理程式是應用程式中捕獲和回響錯誤的例程,對於可能會出錯的任何過程均要對這些過程添加錯誤處理程式。以下是一個通用的錯誤處理程式:

執行一些代碼

設定錯誤捕獲

On Error GoTo CheckError

執行一些代碼,這些代碼有可能會觸發錯誤

退出子過程

Exit Sub

CheckError:

錯誤處理程式

設計錯誤處理程式

設計錯誤處理程式一般通過捕獲錯誤、編寫錯誤處理例程和退出錯誤處理例程三個步驟來完成。

設定錯誤捕獲

當錯誤發生時,通知應用程式在分支點(執行錯誤處理例程的地方)設定或激活錯誤捕獲,使用On Error語句來捕獲錯誤。當VB執行該語句時就激活了錯誤捕獲。當包含錯誤捕獲的過程是活動的時候,錯誤捕獲始終是激活的,直到該過程執行Exit Sub、Exit函式、Exit屬性、End Sub、End函式或End屬性語句時,錯誤捕獲才停。儘管在任一時刻任一過程只能激活一個錯誤捕獲,但可建立幾個供選擇的錯誤捕獲並在不同的時刻激活不同的錯誤捕獲。

編寫錯誤處理例程

編寫錯誤處理例程要添加行標籤,行標籤表示錯誤處理例程開始。行標籤應該有一個具有描述性的名稱,其後必須加冒號。一般情況下,把錯誤處理代碼放置在過程末端,該過程在緊靠行標籤前方處具有ExitSub、Exit函式或Exit屬性語句。如果未出現錯誤,則過程可避免執行錯誤處理例程。

VB中的Err對象是專門用來進行錯誤處理的對象,該對象中包含了程式所發生錯誤的各種信息。在錯誤處理例程中可使用包含數值代碼的Err對象的Number屬性,該代碼代表最新的運行錯誤。

退出錯誤處理例程

在處理完錯誤之後,應退出錯誤處理例程。有四種方法可以退出錯誤處理例程:

(1) Resume[0]語句:使用該語句之後,對於出錯的語句,或者對於最近曾執行過程調用的語句,程式會在改正產生錯誤的條件之後,恢復這些語句。

(2) Resume Next語句:使用該語句,錯誤發生在包含錯誤處理例程的過程之外,而且所調用的過程不具有激活的錯誤處理例程,則在調用了出現錯誤的過程之後的那條語句處,執行恢復。

(3) Resume line語句:使用該語句,將會退出錯誤處理例程,並在指定行標籤的地方恢復語句的執行。

(4) Err對象的Raise方法:使用Err對象的Raise方法可以觸發運行時錯誤。在錯誤處理例程內執行這一語句時, VB將會搜尋另一個錯誤處理例程的調用列表,將當前的錯誤交由另一個錯誤處理例程來進行處理。

相關詞條

熱門詞條

聯絡我們