programing

중첩된 Try/Catch 블록은 나쁜 생각입니까?

kingscode 2023. 5. 21. 13:57
반응형

중첩된 Try/Catch 블록은 나쁜 생각입니까?

다음과 같은 구조가 있다고 가정합니다.

Try
  ' Outer try code, that can fail with more generic conditions, 
  ' that I know less about and might not be able to handle

  Try
    ' Inner try code, that can fail with more specific conditions,
    ' that I probably know more about, and are likely to handle appropriately
  Catch innerEx as Exception
    ' Handle the inner exception
  End Try

Catch outerEx as Exception
  ' Handle outer exception
End Try

나는 몇몇 의견들을 보았습니다.Try이런 블록은 권장되지 않지만, 구체적인 이유는 찾을 수 없었습니다.

이것은 잘못된 코드입니까?만약 그렇다면, 왜?

전체 메소드에 대해 한 번의 시도/캐치를 수행하고 다른 한 번은 루프 내에서 예외를 처리하고 나머지 컬렉션을 계속 처리하는 것과 같은 특정 상황이 있습니다.

스택을 풀고 컨텍스트를 잃는 대신 오류가 발생한 비트를 건너뛰고 계속 진행하려는 경우에만 가능합니다.편집기에서 여러 파일을 여는 것이 한 예입니다.

즉, 이름에서 알 수 있듯이 예외는 예외여야 합니다.프로그램은 이들을 처리해야 하지만 정상적인 실행 흐름의 일부로 이들을 피하려고 합니다.대부분의 언어에서 계산 비용이 많이 듭니다(파이썬은 주목할 만한 예외 중 하나입니다).

또 다른 유용한 기술은 특정 예외 유형을 포착하는 것입니다.

Try
    'Some code to read from a file

Catch ex as IOException
    'Handle file access issues (possibly silently depending on usage)
Catch ex as Exception
    ' Handle all other exceptions.
    ' If you've got a handler further up, just omit this Catch and let the 
    ' exception propagate
    Throw
End Try

또한 오류 처리 루틴에서 중첩된 시도/캐치를 사용합니다.

    Try
        Dim Message = String.Format("...", )
        Try
            'Log to database
        Catch ex As Exception
            'Do nothing
        End Try

        Try
            'Log to file
        Catch ex As Exception
            'Do nothing
        End Try
    Catch ex As Exception
        'Give up and go home
    End Try

저는 사실 네스트에 대해 본질적으로 잘못된 것은 없다고 생각합니다.Try/Catch블록은 탐색하기 어려울 수 있고 리팩터링(내부)을 수행할 수 있다는 신호일 가능성이 높다는 점을 제외하고는Try/Catch예를 들어, 고유한 방법으로).

하지만 저는 이 논평을 다루고 싶습니다.

' Outer try code, that can fail with more generic conditions, 
' that I know less about and might not be able to handle

특정 상황에서 예외를 처리하는 방법을 모르는 경우에는 저를 믿으십시오. 해당 예외를 파악하지 마십시오.복구 방법을 모르는 것을 발견하고 손상된 상태에서 즐겁게 앱을 계속 진행하는 것보다 애플리케이션이 중단되도록 두는 것이 좋습니다(로그를 기록하고 삼키지 마십시오).그 이후로 행동은 기껏해야 예측할 수 없을 것입니다.

언급URL : https://stackoverflow.com/questions/4799758/are-nested-try-catch-blocks-a-bad-idea

반응형