Wrapping exception handling around a function

Peter Otten __peter__ at web.de
Thu Feb 12 17:56:03 CET 2004


Edward C. Jones wrote:

> Is there a better way to write the following?
> 
> --------
> 
> import sys, traceback
> 
> class LocalError(StandardError):
>      pass
> 
> _first = True
> 
> # "fcn(*args)" is executed. If one of the exceptions listed in
> # "catchtuple" is thrown in "fcn", the exception is caught here.
> # The traceback and message are written to "badfile". Then
> # "LocalError" is raised. "wrapper" is useful when testing a
> # collection of functions.
> def wrapper(badfile, fcn, args, catchtuple):
>      global _first
>      try:
>          fcn(*args)
>      except tuple(catchtuple), message:
>          if _first:
>              bad = file(badfile, 'w')
>              _first = False
>          traceback.print_exc(100, bad)
>          raise LocalError

I find, e. g.

wrapper("logfile.txt", file, ["somefile.txt", "w"], (IOError,))

much less readable than

import logging

logger = logging.getLogger("mylogger")

try:
    f = file("somefile.txt", "w")
except IOError:
    logger.exception("some hints")
    raise LocalError("some hints")

and don't mind the few extra keystrokes. As for recording only the first
traceback, I'm not that familiar with the logging module, but I still
recommend it over a selfmade scheme.

Peter






More information about the Python-list mailing list