[Python-Dev] Handle errors in cleanup code (original) (raw)

Martin (gzlist) gzlist at googlemail.com
Mon Jun 12 03:31:02 EDT 2017


On 12/06/2017, Serhiy Storchaka <storchaka at gmail.com> wrote:

But if an error is raised when execute undosomething(), it replaces the original exception which become chaining as the context attribute. The problem is that this can change the type of the exception. If dosomethingother() raises SystemExit and undosomething() raises KeyError, the final exception has type KeyError.

For Python 2.7, I've used the following idiom, which always masks errors from the undo:

  do_something()
  try:
      do_something_other()
  except:
      try:
          undo_something()
      finally:
          raise

Unfortunately, that breaks down on Python 3, as the new exception propogates with the original as context..

Does it mean that we should rewrite every chunk of code similar to the above? And if such cumbersome code is necessary and become common, maybe it needs syntax support in the language? Or changing the semantic of exceptions raised in error handlers and finally blocks?

What I want is a way to chain exceptions in the other direction, raising the original error, but attaching a related one. Unfortunately neither cause or context really help.

Martin



More information about the Python-Dev mailing list