Jeff Dyke wrote:

I've come across an error that i'm not yet able to create a test case
for but wanted to get see if someone could shed light on this.

I have imported a module at the top of my file with
import mymodulename

this module is used many times in the current file successfully, but
then I attempt to use it one more time and get: UnboundLocalError:
local variable 'mymodulename' referenced before assignment

Let me guess: you've done

    def myfunc():
        print mymodulename
        import mymodulename

or something similar? Getting an exception in this case is the excepted behaviour; the reason being that a variable in a block only belongs to a single scope. for the entire block. For details, see:

    http://docs.python.org/ref/naming.html

Especially this section:

"If a name binding operation occurs anywhere within a code block, all uses of the name within the block are treated as references to the current block. This can lead to errors when a name is used within a block before it is bound. This rule is subtle. Python lacks declarations and allows name binding operations to occur anywhere within a code block. The local variables of a code block can be determined by scanning the entire text of the block for name binding operations."

To fix this, mark the name as global:

    def myfunc():
        global mymodulename # I mean the global name!
        print mymodulename
        import mymodulename

</F>

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to