Don't understand syntax error: unqualified exec is not allowed ..

Stef Mientki stef.mientki at gmail.com
Tue Oct 21 14:29:37 EDT 2008


Terry Reedy wrote:
> Stef Mientki wrote:
>> hello,
>>
>> I've syntax error which I totally don't understand:
>>
>> ########## mainfile :
>> import test_upframe2
>>
>> if __name__ == '__main__':
>>  var1 = 33
>>  code = 'print var1 + 3 \n'
>>  test_upframe2.Do_Something_In_Parent_NameSpace ( code )
>>
>> ########### file = test_upframe2 :
>> class Do_Something_In_Parent_NameSpace ( object ) :
>>  def __init__ ( self, code ) :
>>    def do_more ( ) :                       ## Indentation corrected here
>>      nonvar = [3,4]
>>      while len ( nonvar ) > 0 :            # <<<===
>>        nonvar.pop()                        # <<<===
>
> Indendation is screwed. Is the above all do_more body?
sorry, don't know how this happened, as I always copy/paste ?

>
>>    import sys
>>    p_locals  = sys._getframe(1).f_locals
>
> Which locals does this get you? __init__'s? (locals()?)
AFAIK locals() == sys._getframe(0).f_locals
>
>>    p_globals = sys._getframe(1).f_globals
>
> Isn't this just the same as globals()?
AFAIK, again one level up
>
>>    try :
>>      exec ( code, p_globals, p_locals )
>
> This is 3.0 exec function syntax.
weird, I use it in 2.5 and if I remember well it already worked in 2.4.
but exchanging the function with the statement yields exactly the same 
results
>   Postings should specify which interpreter you are running, 
> especially when mucking with
> internals.
>
>>    except :
>>      print 'ERROR'
>>
>>
>> gives me:
>> SyntaxError: unqualified exec is not allowed in function '__init__' 
>> it contains a nested function with free variables (gui_support.py, 
>> line 408)           "unqualified exec" : I thought that meant there 
>> is some ambiguity in the namespace, but  I explictly definied the 
>> namespace
>>
>> The function "do_more"  is never called, so what does it matter 
>> what's in there ?
>>
>> If I remove the while-loop (which of course I can't) the syntax error 
>> disappears.
>>
>> I can place the function either as a class method or as a normal 
>> function outside the class,
>> which both works well.
>> But I want the method / function not to be hidden.
>
> Since you are hiding it, I presume you mean to be, not not to be.
Yes ;-)
>>
>> Why does the above syntax error appear ?
>> Are  there other ways to hide the function ?
>
> Either use module level __all__ or name the function _do_more and 
> anyone will know it is private to the module.
>
done.

And now I still don't understand the problem in the above code ;-)

thanks,
Stef



More information about the Python-list mailing list