Explicit variable declaration
Filip Gruszczyński
gruszczy at gmail.com
Wed Apr 23 12:13:34 EDT 2008
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
More information about the Python-list
mailing list