Are nested Try/Catch blocks a bad idea?

后端 未结 2 2038
一生所求
一生所求 2020-12-03 00:42

Let\'s say we have a structure like so:

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


        
2条回答
  •  囚心锁ツ
    2020-12-03 00:57

    There are certain circumstances where they're a good idea, e.g. one try/catch for the whole method and another inside a loop as you want to handle the exception and continue processing the rest of a collection.

    Really the only reason to do it is if you want to skip the bit that errored and carry on, instead of unwinding the stack and losing context. Opening multiple files in an editor is one example.

    That said, exceptions should (as the name implies) be exceptional. A program should handle them but try to avoid them as part of normal execution flow. They're computationally expensive in most languages (Python being one notable exception).

    One other technique which can be useful is catching specific exception types...

    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
    

    We also use nested try/catches in our error handling routines...

        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
    

提交回复
热议问题