best idiom for wide try/except net?

Russell E. Owen no at spam.invalid
Wed Jun 18 19:55:33 EDT 2003


I have an application that has to be as robust as possible but also 
loads some user-written modules. it is useful in a few places to catch 
almost any exception and report a detailed traceback, then go on.

So far I've been doing this:

try
  # code that might have bugs
except StandardError:
  sys.stderr.write(...)
  traceback.print_exc(file=sys.stderr)

since catching "Exception" also catches SystemExit, which sounded like a 
bit much. (I'd rather also not catch KeyboardInterrupt, but I can live 
with that).

However, some standard libraries, such as socket, use exceptions which 
are a subclass of Exception, but not a subclass of StandardError. I'm 
wondering if this typical/normal/acceptable for standard libraries or is 
something to be fixed?

The only workaround I've thought of is this, which looks a bit ugly to 
me (it seems a shame to have to explicitly catch stuff I don't want):

try:
  # code that might have bugs
except (SystemExit, KeyboardInterrupt):
  # exceptions I do not want to catch
   throw
except:
   # all other exceptions
  sys.stderr.write(...)
  traceback.print_exc(file=sys.stderr)

Any suggestions?

-- Russell




More information about the Python-list mailing list