On 9/13/2012 5:05 PM, Paul Wiseman wrote:
I think it would be useful if there was a way to skip into the next except block, perhaps with continue as I think it's currently always illegal to use in an except block. I don't believe there's currently a way to do this.
This is my reasoning, often there's multiple reasons for exceptions that raise the same exception, as an example an IOError might get raised for lots of different reasons. If you want to handle one or several of these reasons, you have to catch all exceptions of this type, but there's not really a way to "put back" the exception if it isn't the type you were after. For instance
try: operation() except IOError as err: if err.errno == 2: do_something() else: continue #This would continue the except down to the next check, except Exception except Exception as err: logger.error("Error performing operation: {}".format(err.message)") some_clean_up() raise
The current alternatives to get this behaviour I don't believe are as nice, but maybe I'm missing something
As you already know, raise puts the exception back, in a sense try: try: operation() except IOError as err: if err.errno == 2: do_something() else: raise except Exception as err: logger.error("Error performing operation: {}".format(err.message)") some_clean_up() raise or probably better try: operation() except Exception as err: if isinstance(err, IOError) and err.errno == 2: do_something() else: logger.error("Error performing operation: {}".format(err.message)") some_clean_up() raise -- Terry Jan Reedy