[python-win32] How Can I exec() a statement?
Gabriel Genellina
gagenellina at softlab.com.ar
Tue Apr 12 04:59:35 CEST 2005
At Thursday 7/4/2005 10:53, * William wrote:
Please stay in the list - and even move to the Python-list as those topics
are not specific to Windows.
>Exactly what I want to do -- for the enquiry about "what" I want to do, it
>is best to use as an example.
>#4
>b = 2
>print "Before:"
>print " a = %s" % str( a )
>print " b = %s" % str( b )#
>codeLine = 'a = b + 6'
>exec codeLine in globals(), locals()
>#
>print "After:"
>print " a = %s"% str( a )
>print " b = %s" % str( b )
>
>... of course the notion, is a little more elaborate though still in its
>infancy. I am thinking it will be a basic verification tool or even an
>aid for debugging. By chopping up the line, I can print the value of all
>the symbols in the codeLine. The 'trick' is going to be Not calling
>functions twice (in case there is a side-effect).
So you are going to write your own debugger? I'd try the existing ones first :)
It's hard to recognize automatically the relevant symbols, even using the
tokenize/token/parser modules.
Unles you restrict yourself to very simple expressions with no objects, no
attribute selection, no subscripting...
a[round(math.sin(2*math.pi*obj.current_angle/180.0+obj.phase))]*x+config['offset']
There is a lot of names there: a,round,math,sin,pi,obj... Some just make
sense in the context of another (by example, there is no phase variable,
it's an attribute of obj). Maybe current_angle is a property and getting
its value actually means invoking a function wich reads a sensor...
> For example, I'd like a way to get the symbol name for variable a
> above. Is there a function like "nameOF( a )"?
Maybe a Python hacker guru could say something, but AFAIK, once you get
inside the function nameOF( a ), there is no way to tell where its argument
came from. In the following example, I think there is no way to distinguish
inside f if it was called with a or b as an argument, since both are simply
names pointing to the same object:
>>> def f(x):
... print x, id(x)
...
>>>
>>> a = [1,2,3]
>>> b = a
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> id(a)
6999440
>>> id(b)
6999440
>>> f(a)
[1, 2, 3] 6999440
>>> f(b)
[1, 2, 3] 6999440
>>>
Gabriel Genellina
Softlab SRL
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/python-win32/attachments/20050411/37720264/attachment.html
More information about the Python-win32
mailing list