Visual Basic 語言參考
Try...Catch...Finally 陳述式 (Visual Basic)

提供在給定的程式碼區塊 (仍在執行中的程式碼) 發生的部分或所有可能錯誤的處理方式。

Try
    [ tryStatements ]
    [ Exit Try ]
[ Catch [ exception [ As type ] ] [ When expression ]
    [ catchStatements ]
    [ Exit Try ] ]
[ Catch ... ]
[ Finally
    [ finallyStatements ] ]
End Try
參數

tryStatements

選擇項。發生錯誤的陳述式。可以是複合陳述式。

Catch

選擇項。允許多個 Catch 區塊。在處理 Try 區塊時,如果發生例外狀況,則會按文字順序檢查每一個 Catch 陳述式,以判斷它是否會利用代表已擲回之例外狀況的 exception 來處理例外狀況。

exception

選擇項。任何變數名稱。exception 的初始值就是擲回的錯誤值。與 Catch 搭配使用以指定攔截的錯誤。如果省略,則 Catch 陳述式會攔截所有例外狀況。

type

選擇項。指定類別篩選條件類型。如果 exception 的值為 type 所指定的型別或衍生型別 (Derived Type),則識別項會繫結到例外狀況物件。

When

選擇項。只有在 expression 評估為 True 時,具有 When 子句的 Catch 陳述式才會攔截例外狀況。只有在檢查例外狀況的型別之後,才會套用 When 子句,而且 expression 可能會參考代表例外狀況的識別項。

expression

選擇項。必須能夠隱含轉換為 Boolean。描述一般篩選條件的任何運算式。通常,用於按錯誤代碼篩選。和 When 關鍵字一起使用來指定何種環境下會攔截錯誤。

catchStatements

選擇項。此類陳述式用於處理在關聯的 Try 區塊中所發生的錯誤。可以是複合陳述式。

Exit Try

選擇項。從 Try...Catch...Finally 結構中斷的關鍵字。執行會利用緊跟在 End Try 陳述式後面的程式碼繼續進行。仍將執行 Finally 陳述式。不可用於 Finally 區塊中。

Finally

選擇項。當執行離開 Try 陳述式的任一部分時,一律會執行 Finally 區塊。

finallyStatements

選擇項。在所有其他錯誤處理發生之後執行的陳述式。

End Try

結束 Try...Catch...Finally 結構。

備註

來自 Try 區塊的區域變數是個別的區塊,所以無法在 Catch 區塊中使用。如果想在多個區塊中共用一個變數,請在 Try...Catch...Finally 結構外宣告該變數。

Try 區塊包含可能會發生錯誤的程式碼,而 Catch 則包含用於處理任何確實發生錯誤的程式碼。如果在 Try 區塊中發生錯誤,則程式控制權會傳遞至適當的 Catch 陳述式以進行配置。exception 引數是 Exception 類別 (Class) 或衍生自 Exception 類別之類別的執行個體。Exception 類別執行個體會對應至在 Try 區塊中發生的錯誤。這個執行個體會包含錯誤的相關資訊,其中包括錯誤的號碼和訊息。

如果 Catch 陳述式未指定 exception 引數,則會攔截所有類型的系統或應用程式例外狀況。在攔截您要的所有特定例外狀況之後,一定要使用這個變異形式做為 Try...Catch...Finally 結構中的最後一個 Catch 區塊。控制流程永遠無法到達接在不含 exception 引數之 Catch 後面的 Catch 區塊。

在部分信任的情況下,例如裝載在網路共用的應用程式,Try...Catch...Finally 不會攔截在叫用包含呼叫的方法前所發生的安全性例外狀況。放在伺服器共用並從那裡執行時,下列範例會產生錯誤:"System.Security.SecurityException: Request Failed"。如需安全性例外狀況的詳細資訊,請參閱 SecurityException 類別。

Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
    Try
        Process.Start("http://www.microsoft.com")
    Catch ex As Exception
        MsgBox("Can't load Web page" & vbCrLf & ex.Message)
    End Try
End Sub

在此種部分信任的情況下,您需要將 Process.Start 陳述式 (Statement) 放在個別的 Sub 中。初始呼叫 Sub 將會失敗,這允許在啟動包含 Process.StartSub,並產生安全性例外狀況之前,Try...Catch 能夠攔截這項錯誤。

Note注意事項

如果 Try 陳述式未包含至少一個 Catch 區塊,它必須包含一個 Finally 區塊。

範例

下列簡化的範例會說明 Try...Catch...Finally 陳述式的結構。

Visual Basic
Public Sub TryExample()
    Dim x As Integer = 5   ' Declare variables.
    Dim y As Integer = 0
    Try                    ' Set up structured error handling.
        x = x \ y          ' Cause a "Divide by Zero" error.
    Catch ex As Exception When y = 0        ' Catch the error.
        Beep()
        MsgBox("You tried to divide by 0.") ' Show an explanatory message.
    Finally
        Beep()             ' This line is executed no matter what.
    End Try
End Sub
請參閱

參考

End 陳述式
Err 物件 (Visual Basic)
Exit 陳述式 (Visual Basic)
On Error 陳述式 (Visual Basic)
GoTo 陳述式
Exception

標記 :


Page view tracker