Jeff Dyke wrote:
so how did that processing use the "mymodulena me" name?
the calling method has nothing to do with what's considered to be a
local variable in the method being called, so that only means that the
name is indeed available in the global scope.
more likely, it indicates that you removed the line that caused Python
to treat that name as a local variable.
even after reading the page I pointed you to?
import binds a name, so an import statement inside a function will cause
Python to treat that name as a local variable (unless you add a global
declaration to that function).
maybe a few examples will make this clearer; the following snippets are
complete programs:
snippet 1:
import module # adds module to the global namespace
def func():
module.func() # uses module from the global namespace
func() # no error here
snippet 2:
def func():
import module # adds module to the *local* namespace
module.func()
func() # no error here
module.func() # doesn't work; no module in global namespace
snippet 3:
def func():
global module # marks module as a global name
import module # adds module to the *global* namespace
module.func()
func() # no error here
module.func() # no error here; global module set by function
snippet 4:
import module # adds module to global namespace
def func():
import module # adds module to local namespace too
print module # prints local variable
module = None # sets local variable to None
func() # no error here
module.func() # no error here either; uses global namespace
snippet 5:
import module
def func():
print module # fails with an UnboundLocalErr or.
# lots of lines
import module # adds to local namespace; marks name as local
# some more code
func() # will fail at print statement
my guess is that the last snippet corresponds to your case.
</F>
>actually no, the only things in that fucntion were.
> print globals().keys( ) - i see it here
> print mymodulename - it fails here.
>>
>the `import mymodulename` statement is at the very top of the file.
>>
>plus the processing that was attempted after.
> print globals().keys( ) - i see it here
> print mymodulename - it fails here.
>>
>the `import mymodulename` statement is at the very top of the file.
>>
>plus the processing that was attempted after.
>in fact in the calling
>method i was able to execute print mymodulename and it printed the
>expected python output.
>method i was able to execute print mymodulename and it printed the
>expected python output.
local variable in the method being called, so that only means that the
name is indeed available in the global scope.
>So i went back to check that the name 'mymodulename' was not getting
>overwritten by something else and the error went away. I've been
>working on something else entirely for the past few hours and have
>changed none of the code...and now it works. which is even more
>troublesome then the error itself.
>overwritten by something else and the error went away. I've been
>working on something else entirely for the past few hours and have
>changed none of the code...and now it works. which is even more
>troublesome then the error itself.
to treat that name as a local variable.
>Follow on question. If this name, mymodulename, was imported in some
>other module.fucntion local to a function like
>def anotherfunc():
> import mymodulename
>>
>would that remove it from the globals() and save it to a locals() ? I
>would assume the answer to be no.
>other module.fucntion local to a function like
>def anotherfunc():
> import mymodulename
>>
>would that remove it from the globals() and save it to a locals() ? I
>would assume the answer to be no.
import binds a name, so an import statement inside a function will cause
Python to treat that name as a local variable (unless you add a global
declaration to that function).
maybe a few examples will make this clearer; the following snippets are
complete programs:
snippet 1:
import module # adds module to the global namespace
def func():
module.func() # uses module from the global namespace
func() # no error here
snippet 2:
def func():
import module # adds module to the *local* namespace
module.func()
func() # no error here
module.func() # doesn't work; no module in global namespace
snippet 3:
def func():
global module # marks module as a global name
import module # adds module to the *global* namespace
module.func()
func() # no error here
module.func() # no error here; global module set by function
snippet 4:
import module # adds module to global namespace
def func():
import module # adds module to local namespace too
print module # prints local variable
module = None # sets local variable to None
func() # no error here
module.func() # no error here either; uses global namespace
snippet 5:
import module
def func():
print module # fails with an UnboundLocalErr or.
# lots of lines
import module # adds to local namespace; marks name as local
# some more code
func() # will fail at print statement
my guess is that the last snippet corresponds to your case.
</F>