| delorie.com/archives/browse.cgi | search |
| X-Recipient: | archive-cygwin AT delorie DOT com |
| X-Spam-Check-By: | sourceware.org |
| Date: | Thu, 13 Nov 2008 14:50:17 +0000 |
| From: | "Silas S. Brown" <ssb22 AT cam DOT ac DOT uk> |
| To: | cygwin AT cygwin DOT com |
| Subject: | Python: exec in a function can't create shadows of variables if these are declared "global" in another function of the same module |
| Message-ID: | <20081113145017.GA32353@smaug.linux.pwf.cam.ac.uk> |
| MIME-Version: | 1.0 |
| User-Agent: | Mutt/1.5.16 (2007-06-09) |
| Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm |
| List-Id: | <cygwin.cygwin.com> |
| List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com> |
| List-Archive: | <http://sourceware.org/ml/cygwin/> |
| List-Post: | <mailto:cygwin AT cygwin DOT com> |
| List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs> |
| Sender: | cygwin-owner AT cygwin DOT com |
| Mail-Followup-To: | cygwin AT cygwin DOT com |
| Delivered-To: | mailing list cygwin AT cygwin DOT com |
Consider this Python code:
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 totally
different function somehow stops a shadowed
setting1 from being created by the exec.
This can be worked around by adding a real
assignment before the exec, i.e.:
def f(x):
setting1 = 0
exec(x)
return setting1, setting2
Observed in:
Python 2.5.1 (r251:54863, May 18 2007, 16:56:43) on Cygwin
Not observed in:
Python 2.5.1 (r251:54863, Aug 1 2008, 00:32:16) on SUSE Linux
Silas
--
Silas S Brown http://people.pwf.cam.ac.uk/ssb22
"If your axe is dull and you don't sharpen it,
you have to work harder to use it." - Ecclesiastes 10:10 (TEV)
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |