Type feedback tool?
Scott David Daniels
Scott.Daniels at Acm.Org
Sun Oct 26 19:53:24 EDT 2008
Martin Vilcans wrote:
> Hi list,
>
> I'm wondering if there's a tool that can analyze a Python program
> while it runs, and generate a database with the types of arguments and
> return values for each function. In a way it is like a profiler, that
> instead of measuring how often functions are called and how long time
> it takes, it records the type information. So afterwards, when I'm
> reading the code, I can go to the database to see what data type
> parameter "foo" of function "bar" typically has. It would help a lot
> with deciphering old code.
>
> When I googled this, I learned that this is called "type feedback",
> and is used (?) to give type information to a compiler to help it
> generate fast code. My needs are much more humble. I just want a
> faster way to understand undocumented code with bad naming.
>
It should be pretty easy to do this as a decorator, then (perhaps
automatically) sprinkle it around your source.
def watch(function):
def wrapped(*args, **kwargs):
argv = map(type, args)
argd = dict((key, type(value)) for key, value
in kwargs.iteritems())
try:
result = function(*args, **kwargs)
except Exception, exc:
record_exception(function, type(exc), argv, argd)
raise
else:
record_result(function, type(result), argv, argd)
return wrapped
then fill your normal code with:
@watch
def somefun(arg, defarg=1):
...
...
Finally record_* could write to a data structure (using bits like
function.__name__, and f.__module__, and possibly goodies from inspect).
Then you wrap your actual code start with something like:
try:
main(...)
finally:
<write data structure to DB>
--Scott David Daniels
Scott.Daniels at Acm.Org
More information about the Python-list
mailing list