UnboundLocalError on shadowed import

vincent wehren vincent at visualtrans.de
Wed Jun 30 05:10:57 EDT 2004

Peter Hansen wrote:
> It "has to" raise an exception.  The use of "sys" inside the function
> is local (because you assign to it, because "import sys" is effectively
> an assignment).  Locals are not handled quite the same as other names,
> as you know -- they are turned into index lookups in a list instead of
> hash lookups in a dictionary.  The interpreter can't know that your use
> of sys.exit(0) is supposed to refer to the global sys, because all uses
> of "sys" are really just "local variable number 3" or something like
> that inside the function.
> Basically, "don't do that" is about the best you'll get, I think.

Well, just for the sake of it, there still is the obvious option of 
adding the line "global sys" before sys.exit(0) to tell the interpreter 
to use the "globally imported sys".

Vincent Wehren

More information about the Python-list mailing list