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
"continue" already has a meaning that would make this ambiguous: for i in range(10): try: raise IOError() except IOError as err: continue Also, I would inevitably write what you want as: try: operation() except Exception as err: if isinstance(err, IOError): if err.errno == 2: do_something() else: logger.error( "Error performing operation: {}".format(err.message)") some_clean_up() raise -- Scott Dial scott@scottdial.com