I tried to make it less smelly, but failed.  It's more difficult to generalize this one because it's turning an exception into a normal completion.