On Nov 10, 7:02 am, "Gabriel Genellina" <[EMAIL PROTECTED]> wrote: > En Sat, 10 Nov 2007 03:03:00 -0300, Paddy <[EMAIL PROTECTED]> > escribió: > > > > > Hi, > > # If I have a function definition > > def f1(arg): > > global capturecall > > if capturecall: > > ... > > do_normal_stuff(arg) > > > # and its later use: > > def f2(): > > ... > > return f1(a and (b or c)) > > > # But also to do: > > capturecall = True > > result = f2() > > # And get the same result, but also save the actual > > # calling arguments to f1 either as a string: > > # "a and (b or c))" > > # Or a code object computing a and(b or c) > > Would be enough to have the source line text? > > <code test1.py> > def extract_caller_info(): > import sys, traceback > return traceback.extract_stack(sys._getframe(2), limit=1) > > def f1(arg): > if capturecall: > print extract_caller_info() > # do_normal_stuff(arg) > > def f2(): > a,b,c = 1,0,3 > return f1(a and (b or c)) > > capturecall = True > result = f2() > </code> > > output is like this: > [('test1.py', 12, 'f2', 'return f1(a and (b or c))')] > > source file name, line number, function name, source line text. > > > P.S. You might also have multiple calls where I > > would need to capture each individual argument > > expression of f1 e.g: > > def f3(): > > ... > > return f1(a and b) or e or f1(c and d) > > Tell your users that they'll have better results if those two calls are > split on different lines: > > def f3(): > return (f1(a and b) > or e > or f1(c and d)) > > Output: > [('test1.py', 18, 'f3', 'return (f1(a and b)')] > [('test1.py', 20, 'f3', 'or f1(c and d))')] > > -- > Gabriel Genellina
Thanks Gabriel, that will alow me to move forward.
-- http://mail.python.org/mailman/listinfo/python-list