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