Can you obtain names from parent scope?
Justin Shaw
wyojustin at hotmail.com
Sun Jan 19 13:18:20 EST 2003
"Will Sadkin" <wsadkin at nameconnector.com> wrote in message
news:850fb3a6.0301170751.488179c6 at posting.google.com...
> I want to write a function that takes an arbitrary set of objects,
> and prints them in the form "name = <value>." That is, I want to be
> able to say:
>
> >>> a = 'hi!'
> >>> dbgval(a)
> a = hi!
> >>> b = 2
> >>> dbgval(b)
> b = 2
>
Will,
I was curoius about this myself. You post got me to dive in. It looks like
inspect will work with linecache to get the result you want. I grab the
calling line and get the variable name from a regx. Right now it only works
for a single arg but the extension is obvious.
Good luck
Justin
----------------- Solution ---------------------
import inspect
import linecache
import sre
regx = sre.compile('dbgprint\((\w*)\)')
def dbgprint(var):
'''Print the name of var with its value in the callers scope'''
# Clear to be on the safe side. If the code is not being edited you
don't need this.
linecache.clearcache()
f = inspect.currentframe(1)
file = inspect.getfile(f)
lnum = f.f_lineno
line = lc.getline(file, lnum)
match = regx.search(line)
if match:
print '%s = %s' % (match.group(1), var)
else:
# bail and just print var
print var
a = 5
dbgprint(a)
More information about the Python-list
mailing list