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
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to