"""
"s" is a string containing a Python statement. "objstrlist" is a list of
strings where each string is a python expression. An example is
watch('x = 2 * [[]]', ['x[0]', 'x[1]']
"""
import string # "s" is a string containing a Python statement. "objstrlist" is a list of # strings where each string is a python expression. An example is # watch('x = 2 * [[]]', ['x[0]', 'x[1]'] def watch(s, objstrlist): exec s in globals(), {} print 'After executing "%s"' % s for objstr in objstrlist: v = eval(objstr) t = str(type(v))[7:-2] print '%10s : value %10s, id %9i, type %-10s' % \ (objstr, v, id(v), t) # Executes the statement, or list of statements, s, then prints information # about all the local variables that were created. def watchall(s): if type(s) == type([]): lines = s else: lines = string.split(s, '\n') prog = string.join(lines, '\n') # It appears that some python programs need to end in a newline. if prog[-1] != '\n': prog = prog + '\n' loc = {} exec prog in globals(), loc print 'After executing' for line in lines: print '-> ', line for objstr in loc.keys(): v = loc[objstr] t = str(type(v))[7:-2] print '%10s : value %10s, id %9i, type %-10s' % \ (objstr, v, id(v), t) # Same as watchall but prints information about elements of lists. def watchall1(s): if type(s) == type([]): lines = s else: lines = string.split(s, '\n') prog = string.join(lines, '\n') # It appears that some python programs need to end in a newline. if prog[-1] != '\n': prog = prog + '\n' loc = {} exec prog in globals(), loc print 'After executing' for line in lines: print '-> ', line for objstr in loc.keys(): v = loc[objstr] t = str(type(v))[7:-2] print '%10s : value %10s, id %9i, type %-10s' % \ (objstr, v, id(v), t) if type(v) == type([]): for i in range(len(v)): t = str(type(v[i]))[7:-2] print '%7s[%i] : value %10s, id %9i, type %-10s' % \ (objstr, i, v[i], id(v[i]), t) if __name__ == '__main__': prog = [ "for i in range(3):", " print i" ] watchall(prog) #