[Python-Dev] LOAD_NAME & classes (original) (raw)

Tim Peters tim.one@comcast.net
Tue, 23 Apr 2002 23:53:59 -0400


[Guido]

... This particular form of breakage was a common error reported on c.l.py and to help at python.org until we added UnboundLocalError to make the diagnostic cleaner.

It was indeed, and adding UnboundLocalError did cut the number of questions.

Maybe that's all that's needed;

It's hard to know what could really help more. If Greg Wilson is still running newcomer experiments, I'd like to see what newcomers have to say about this:

x = 2 def f(): print x # A x = 3

f() print x # B

A: What do you think should happen when the print at A executes? B: " " " " " " " " " " B " ?

What I suspect, but don't know, is that a majority of newcomers who expect A to print 2 also expect B to print 3. That is, that they're thinking x is a global variable, and have no conception of local variables in mind.

This is actually what happens in Icon, which also lacks declarations (in the same sense Python lacks them: it doesn't lack them ). The difference is that all variables are global by default in Icon, and you need to explicitly say "local x" if you want a local var instead. That's error-prone for sure, by not quite as much so as Perl (where x is also global by default, but "local $x" sucks you into dynamic scoping; it does not in Icon).