On 08/12/2010 18:06, alust wrote:
Hello,

Can somebody explain this strange (to me) effect please.

In this program it is impossible to access a global variable within a
function:

$ cat /tmp/test.py
x='xxx'
def f():
      print x
      del x

f()

$ python /tmp/test.py
Traceback (most recent call last):
    File "/tmp/test.py", line 6, in<module>
      f()
    File "/tmp/test.py", line 3, in f
      print x
UnboundLocalError: local variable 'x' referenced before assignment

But if we comment the del operator the program will work:

$ cat /tmp/test.py
x='xxx'
def f():
      print x
      #del x

f()

$ python /tmp/test.py
xxx

So why in this example the print operator is influenced by del
operator
that should be executed after it?

The Python source code is compiled to bytecodes which are then
interpreted. It's during the compilation stage that it determines
whether a name is local. If you bind to a name:

    x = 0

or del a name:

    del x

anywhere in the function, it takes that name to be local.

When it actually interprets the bytecode at the print statement it
tries to reference the name, but nothing has been bound to it yet, so
it raises an exception.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to