[Python-Dev] global statements outside functions/methods should raise SyntaxError

Guido van Rossum guido at python.org
Sun Nov 15 21:46:26 CET 2009


On Sun, Nov 15, 2009 at 12:38 PM, Terry Reedy <tjreedy at udel.edu> wrote:
> Ezio Melotti wrote:
>>
>> Python currently accepts global statements at the top level:
>>
>> I opened an issue on the tracker (http://bugs.python.org/issue7329)
>> and Benjamin suggested to discuss this here.
>> The test he mentioned is in test_global.py:
>>
>>   def test4(self):
>>       prog_text_4 = """\
>> global x
>> x = 2
>> """
>>       # this should work
>>       compile(prog_text_4, "<test string>", "exec")
>>
>> It just says that "it should work" but it doesn't say /why/.
>>
>> Any thoughts?
>
> I make the same suggestion a couple of years ago, either this list or Py3k
> list, after newby reported 'problem' on python-list expecting module-level
> global to do something. Guido rejected it on the basis that he wanted to
> minimized differences between module code and function code.

That example should work because you could pass it to exec()/eval()
with separate dicts for locals and globals:

$ python3.0
Python 3.0 (py3k:67506, Dec  3 2008, 10:12:04)
[GCC 4.0.1 (Apple Inc. build 5484)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> glo = {}
>>> lo = {}
>>> so = 'global x; x = 2'
>>> co = compile(so, '', 'exec')
>>> exec(co, glo, lo)
>>> glo['x']
['x']
>>> exec('x = 3', glo, lo)
>>> glo['x']
2
>>> lo['x']
3
>>>

-- 
--Guido van Rossum (python.org/~guido)


More information about the Python-Dev mailing list