Your wish is my command

whitekid's blog

Archive for the ‘decorator’ tag

python exception handler decorator

without comments

쩝.. 내가봐도 참 난해한 코드 ㅋㅋㅋ

class MyException(Exception): pass
class MyException1(Exception): pass
class MyException2(Exception): pass

def exception_catch(exceptions, exception_handler):
    def wrap(func):
        def new_func(*args, **kwargs):
            try:
                return func(*args, **kwargs)
            except exceptions, e:
                return exception_handler(e, *args, **kwargs)
        return new_func
    return wrap

def error_handler(*args, **kwargs):
    print 'handle error'

def my_function():
    pass

@exception_catch((MyException, MyException1), error_handler)
def my_raise_function():
    raise MyException, 'hello'

@exception_catch((MyException, MyException1), error_handler)
def my_raise_function_1():
    raise MyException2, 'unexpected error'

@exception_catch(MyException, error_handler)
def my_raise_function_2():
    raise MyException, 'unexpected error'

my_function()
my_raise_function()
my_raise_function_2()

Written by whitekid

April 5th, 2011 at 8:09 pm

Posted in Uncategorized

Tagged with ,

파라미터가 있는 decorator

without comments

Python의 Decorator 기능은 한마디로 멋지다. 잘 쓰면 유용하지… 근데 작성하면 항상 헷갈린단 말이지…

decorator에 파라미터를 넘겨주고자 하는 경우에도 상당히 헷갈린다. 파라미터가 없는 것하고 형태가 아주 또 달라지거든.. 간단히 기억하자 파라미터가 있는 데코레이터는 wrapp 함수를 한번 더 두어야한다는 것..

def prefix_decorator(func):
        def new_func(*args, **kwargs):
                return 'prefix: ' + func(*args, **kwargs)
        return new_func

def my_decorator(str):
        def wrap(func):
                def new_func(*args, **kwargs):
                        return func(*args, **kwargs) + ' :' + str
                return new_func

        return wrap

@prefix_decorator
@my_decorator('added by decorator')
def test():
        return "I'm test"

print test()

실행 결과는 아래와 같음..

prefix: I'm test :added by decorator

Written by whitekid

March 31st, 2011 at 10:57 am

Posted in Uncategorized

Tagged with ,