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

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Stef Mientki

    #1

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

    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.D o_Something_In_ Parent_NameSpac e ( code )
    >>
    >########### file = test_upframe2 :
    >class Do_Something_In _Parent_NameSpa ce ( 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) "unqualifie d 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
Working...