Message75831
| Author |
ssb22 |
| Recipients |
ssb22 |
| Date |
2008年11月13日.16:10:27 |
| SpamBayes Score |
0.00014402386 |
| Marked as misclassified |
No |
| Message-id |
<1226592628.12.0.507067824651.issue4315@psf.upfronthosting.co.za> |
| In-reply-to |
| Content |
Sorry, I accidentally posted the workaround code instead of the bug
example. This is what I should have posted:
setting1 = "val1"
setting2 = "val2"
def dummy():
global setting1
def f(x):
exec(x)
return setting1,setting2
print f("setting1='new' ; setting2='new'")
Expected result: ('new', 'new')
Actual result: ('val1', 'new')
The presence of "global setting1" in a different function effectively
stops a shadowed setting1 from being created by the exec.
Workaround: Add a real assignment before the exec, i.e.:
def f(x):
setting1 = 0
exec(x)
return setting1, setting2
or do the exec in a dictionary instead of in the current scope, i.e.:
def f(x):
d ={"setting1":setting1,"setting2":setting2}
exec(x) in d
return d['setting1'], d['setting2']
Observed in:
Python 2.5.1 (r251:54863, May 18 2007, 16:56:43) on Cygwin
Python 2.5.2 on 2.6.26-gentoo-r1 (by Christopher Faylor
http://www.cygwin.com/ml/cygwin/2008-11/msg00168.html )
Not observed in:
Python 2.5.1 (r251:54863, Aug 1 2008, 00:32:16) on SUSE Linux
Python 2.4.4 (#2, Apr 17 2008, 01:58:28) (Debian etch, ARM)
Python 2.5.2 (r252:60911, Jul 31 2008, 17:31:22) (Ubuntu) |
|
History
|
|---|
| Date |
User |
Action |
Args |
| 2008年11月13日 16:10:28 | ssb22 | set | recipients:
+ ssb22 |
| 2008年11月13日 16:10:28 | ssb22 | set | messageid: <1226592628.12.0.507067824651.issue4315@psf.upfronthosting.co.za> |
| 2008年11月13日 16:10:27 | ssb22 | link | issue4315 messages |
| 2008年11月13日 16:10:27 | ssb22 | create |
|