Doctest and Decorators in Python -


i trying use python decorator catch exceptions , log exceptions.

import os.path import shutil  class log(object):     def __init__(self, f):         print "inside __init__()"         self.f = f      def __call__(self, *args):         print "inside __call__()"         try:             self.f(*args)         except exception:             print "sorry"  @log def testit(a, b, c):     print a,b,c     raise runtimeerror()  if __name__ == "__main__":     testit(1,2,3) 

it works fine

desktop> python deco.py  inside __init__() inside __call__() 1 2 3 sorry 

the issue when tried use testing doctest

@log def testit(a, b, c):     """     >>> testit(1,2,3)     """     print a,b,c     raise runtimeerror()  if __name__ == "__main__":     import doctest     doctest.testmod() 

nothing seems happening.

desktop> python deco2.py  inside __init__() 

what's wrong this?

the decorated function (which class instance) doesn't __doc__ attribute of original function (which doctest parses). could copy __doc__ on class instance, ... honestly, don't see need class @ here -- you'd better using functools.wraps

import functools def log(func):     @functools.wraps(func)     def wrapper(*args):         try:             return func(*args)         except exception:             print "sorry"     return wrapper 

Comments

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -