try..except with empty exceptions

Cameron Simpson cs at
Sun Apr 12 12:00:08 CEST 2015

On 12Apr2015 17:00, Chris Angelico <rosuav at> wrote:
>On Sun, Apr 12, 2015 at 4:33 PM, Cameron Simpson <cs at> wrote:
>That's what try/finally is for. You can do your cleanup without caring
>exactly what was raised.

Hmm, yes.

>> However, my Asynchron class really is a little special. I use Asynchron to
>> underpin a bunch of classes whose instances get fulfilled later, especially
>> callables that get queued and run at a suitable time (or which get run in
>> response to some external long awaited event). ...
>> Anyway, at some point in the above example "function" gets called (by the
>> infrastructure of "Later") with the supplied arguments as the Later
>> processes its queue.
>> So in this situation: should I catch and defer KeyboardInterrupt or
>> SystemExit?  Maybe not, but the clean/naive implementation says to catch
>> absolutely everything.
>That is a tough one. I would support either of BaseException and
>Exception for this case, and whichever you pick, there will be a time
>when you wish you'd picked the other. But at least now you get a
>chance to think about it. [...]

On reflection I'm probably going to go after a bunch of my in-other-thread 
things that handle "unknown" callables and do something like:

  self.result = None
  self.exc_info = None
    r = func(...)
  except Exception:
    self.exc_info = sys.exc_info
  except BaseException as e:
    self.exc_info = sys.exc_info
    exception("unexpected BaseException: %s", e)
    self.result = r

to catch and report the weirdos. And I might write a little decorator to report 
and reraise NameError to avoid certain times of silent asynchronous failure I 
have to debug.

Colour me convinced, and +0.5 for proposals to retire bare "except".


  [hg/css]fleet*> hg clone . ../css-remove-except:
  updating to branch default
  2871 files updated, 0 files merged, 0 files removed, 0 files unresolved

Unnamed branch to change my practices:-)

Cameron Simpson <cs at>

... It beeped and said "Countdown initiated." Is that bad?

More information about the Python-list mailing list