On 5/10/2014 3:10 PM, Ethan Furman wrote:
On 05/10/2014 02:32 AM, Chris Angelico wrote:

Tell me, what may this function do in a compliant Python?

def demo():
     ret = spam
     spam = 23
     return ret

In CPython, that'll raise UnboundLocalError,

Note:
>>> issubclass(UnboundLocalError, NameError)
True

I am not sure if adding the specificity is helpful or not.

because the local
variable 'spam' does already exist, and currently has no value (no
object bound to it).

No, it does not exist -- or, more accurately, it does not exist *yet*
but will.  The fact that there is a slot waiting for what will be spam
is a cpython implementation detail.

And if you don't like that argument (although it is a perfectly sound
and correct argument), think of the module name space:

ret = spam
spam = 23

will net you a simple NameError, because spam has not yet been created.

In other words, those two lines raise a NameError in either case.

--
Terry Jan Reedy

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

Reply via email to