exec/eval changed?
Michael Hudson
mwh21 at cam.ac.uk
Tue Nov 16 06:16:12 EST 1999
JB <jimbag at kw.igs.net> writes:
> Michael Hudson wrote:
> >
> > JB <jimbag at kw.igs.net> writes:
> >
> > > Did the exec/eval statements change somehow in the 1.5 versions? I
> > > have a script that did an eval( "some code", dict1, locals()) but
> > > now it doesn't work. I've looked through the doc's but they are
> > > little thin as to these statements. Any help is appreciated.
> >
> > Well, eval("some code") is a syntax error. What are you trying to to
> > do? We can't read minds here.
> >
> > Regards,
> > Michael
>
> My apologies. I was thinking that the scoping for the 2nd and 3rd
> parameters to the eval call had changed somehow and thus the code was
> irrelevant to the example.
>
> What I am trying to do is simple eval a string with python formatting
> operations within and return the result. The code string is dynamic.
> Basically:
>
> eval( "'The value of t is %(t)s' % t", self.private_dict, locals())
>
> where t is in self.private_dict. The questions comes because this code
> worked in python v1.5 but does not work in v 1.5.2 and I was curious if
> there had been any changes to the scoping or to the eval/exec calls
> themselves.
How does it fail? If I try something like that I get:
Traceback (innermost last):
File "<pyshell#3>", line 1, in ?
test(2).go()
File "<pyshell#2>", line 6, in go
return eval( "'The value of t is %(t)s' % t", self.private_dict, locals())
File "<string>", line 0, in ?
TypeError: format requires a mapping
If I change it to
return eval( "'The value of t is %s' % t", self.private_dict, locals())
then it works.
You aren't trying to do
return 'The value of t is %(t)s'%self.private_dict
are you? The use of eval seems a bit overkill here!
> Sorry for the confusion.
That's OK; but for future reference you might want to include how your
problem code fails as well!
HTH,
Michael
More information about the Python-list
mailing list