[EMAIL PROTECTED] a écrit :
Hello!

I wanted to use a decorator to wrap partially applied function like
this:
from functools import *

def never_throw(f):
    @wraps(f)
    def wrapper(*args, **kwargs):
        try: return f(*args, **kwargs)
        except: pass

Not an answer to your question, but: by all means, *never* use bare except clauses. Please remember that SysExit and KeyboardInterrupt are exceptions too.

    return wrapper

def foo(i):
    raise ValueError(str(i) + " is too little")

never_throw(partial(foo, 3))

However this fails with an exception saying
AttributeError: 'functools.partial' object has no attribute
'__module__'.

How can I use generic wrapper (never_throw) around partials?

If not already done by someone else, it might be worth filling a ticket - generic decorators should work with any callable, not only with functions (well, IMHO at least).

A possible workaround is:

_dont_pass = (
    SysExit,
    KeyboardInterrupt,
    OtherStuffYouDontWantToPassSilentyHere,
)

def never_throw(f):
    """well... almost never..."
    try:
        f.__module__
    except AttributeError:
        f.__module__ = "whatever"
    @wraps(f)
    def wrapper(*args, **kwargs):
        try:
            return f(*args, **kwargs)
        except Exception, e:
            if isinstance(e, _dont_pass):
                raise



HTH
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to