Wow! This is extremely easy and seems to do exactly what I need. Those decorators are pretty powerful then. Thanks for your help, I'll try to use this.
> def uses(names): > def decorator(f): > used = set(f.func_code.co_varnames) > declared = set(names.split()) > undeclared = used-declared > unused = declared-used > if undeclared: > raise ValueError("%s: %s assigned but not declared" > % (f.func_name, ','.join(undeclared))) > if unused: > raise ValueError("%s: %s declared but never used" > % (f.func_name, ','.join(unused))) > return f > return decorator > > Used something like this: > > >>> @uses("x y") > def f(x): > y = x+1 > return z > > >>> @uses("x y z") > def f(x): > y = x+1 > return z > > > Traceback (most recent call last): > File "<pyshell#36>", line 1, in <module> > @uses("x y z") > File "<pyshell#32>", line 10, in decorator > raise ValueError("%s: %s declared but never used" % (f.func_name, > ','.join(unused))) > ValueError: f: z declared but never used > >>> @uses("x") > def f(x): > y = x+1 > return z > > > Traceback (most recent call last): > File "<pyshell#38>", line 1, in <module> > @uses("x") > File "<pyshell#32>", line 8, in decorator > raise ValueError("%s: %s assigned but not declared" % (f.func_name, > ','.join(undeclared))) > ValueError: f: y assigned but not declared > > > >>> > > -- > http://mail.python.org/mailman/listinfo/python-list > -- Filip Gruszczyński -- http://mail.python.org/mailman/listinfo/python-list