수색…


시도하십시오 ... Catch ... Finally Statement

구조:

Try
    'Your program will try to run the code in this block.  
    'If any exceptions are thrown, the code in the Catch Block will be executed,
    'without executing the lines after the one which caused the exception.
Catch ex As System.IO.IOException
    'If an exception occurs when processing the Try block, each Catch statement
    'is examined in textual order to determine which handles the exception. 
    'For example, this Catch block handles an IOException.
Catch ex As Exception
    'This catch block handles all Exception types.
    'Details of the exception, in this case, are in the "ex" variable.
    'You can show the error in a MessageBox with the below line.
    MessageBox.Show(ex.Message)
Finally
    'A finally block is always executed, regardless of if an Exception occurred.
End Try

예제 코드 :

Try
    Dim obj = Nothing
    Dim prop = obj.Name 'This line will throw a NullReferenceException

    Console.WriteLine("Test.") ' This line will NOT be executed
Catch ex As System.IO.IOException
    ' Code that reacts to IOException.
Catch ex As NullReferenceException
    ' Code that reacts to a NullReferenceException
    Console.WriteLine("NullReferenceException: " & ex.Message)
    Console.WriteLine("Stack Trace: " & ex.StackTrace)
Catch ex As Exception
    ' Code that reacts to any other exception.
Finally   
    ' This will always be run, regardless of if an exception is thrown.
    Console.WriteLine("Completed")
End Try

커스텀 예외의 작성과 throw

사용자 정의 예외를 작성하여 함수 실행 중에 던져 질 수 있습니다. 일반적으로 함수가 정의 된 기능을 수행 할 수없는 경우에만 예외를 throw해야합니다.

Private Function OpenDatabase(Byval Server as String, Byval User as String, Byval Pwd as String)
    if Server.trim="" then 
        Throw new Exception("Server Name cannot be blank")
    elseif User.trim ="" then 
        Throw new Exception("User name cannot be blank")
    elseif Pwd.trim="" then 
        Throw new Exception("Password cannot be blank")
    endif

    'Here add codes for connecting to the server
End function

데이터베이스 작업에서 캐치 해보기

Try..Catch를 사용하여 Catch Segment에 롤백 명령문을 배치하여 데이터베이스 작업을 롤백 할 수 있습니다.

    Try            
        'Do the database operation...        
        xCmd.CommandText = "INSERT into ...."
        xCmd.ExecuteNonQuery()

        objTrans.Commit()
        conn.Close()
    Catch ex As Exception 
        'Rollback action when something goes off           
        objTrans.Rollback()
        conn.Close()
    End Try

추월 할 수없는 예외

Catch ex As Exception 은 모든 예외를 처리 할 수 ​​있다고 주장하지만 Catch ex As Exception 는 하나 있습니다.

Imports System
Static Sub StackOverflow() ' Again no pun intended
    StackOverflow()
End Sub
Static Sub Main()
    Try
        StackOverflow()
    Catch ex As Exception
        Console.WriteLine("Exception caught!")
    Finally
        Console.WriteLine("Finally block")
    End Try
End Sub

죄송합니다. Console에서 아무 것도 출력하지 않는 동안 잡히지 않은 System.StackOverflowException 이 있습니다! MSDN 에 따르면,

.NET Framework 2.0부터는 try / catch 블록을 사용하여 StackOverflowException 객체를 catch 할 수 없으며 해당 프로세스가 기본적으로 종료됩니다. 따라서 스택 오버플로를 감지하고 방지하는 코드를 작성해야합니다.

따라서 System.StackOverflowException 은 캐치 할 수 없습니다. 그거 조심해!

중대한 예외

일반적으로 대부분의 예외는 그다지 중요하지 않지만 유명한 System.StackOverflowException 과 같이 처리 할 수없는 심각한 예외가 있습니다. 그러나 System.OutOfMemoryException , System.BadImageFormatExceptionSystem.InvalidProgramExceptionCatch ex As Exception 감추어 질 수있는 요소가 있습니다. 제대로 처리 할 수 ​​없다면이 코드를 남겨 두는 것이 좋습니다. 이러한 예외를 필터링하려면 다음과 같은 도우미 메서드가 필요합니다.

Public Shared Function IsCritical(ex As Exception) As Boolean
    Return TypeOf ex Is OutOfMemoryException OrElse
           TypeOf ex Is AppDomainUnloadedException OrElse
           TypeOf ex Is AccessViolationException OrElse
           TypeOf ex Is BadImageFormatException OrElse
           TypeOf ex Is CannotUnloadAppDomainException OrElse
           TypeOf ex Is ExecutionEngineException OrElse ' Obsolete one, but better to include
           TypeOf ex Is InvalidProgramException OrElse
           TypeOf ex Is System.Threading.ThreadAbortException
End Function

용법:

Try
    SomeMethod()
Catch ex As Exception When Not IsCritical(ex)
    Console.WriteLine("Exception caught: " & ex.Message)
End Try


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow