[Python-Dev] Assignment to None (original) (raw)
Terry Reedy tjreedy at udel.edu
Mon Jun 9 21:22:39 CEST 2008
- Previous message: [Python-Dev] Assignment to None
- Next message: [Python-Dev] Assignment to None
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
"Tony Nelson" <tonynelson at georgeanelson.com> wrote in message news:p04330107c4730af274e7@[192.168.123.162]... | At 4:46 PM +0100 6/9/08, Michael Foord wrote: | Or perhaps CPython should just stop trying to detect this at compile time. | Note that while assignment to ".None" is not allowed, setattr(foo, "None", | 1) then referencing ".None" is allowed. || >>> f.None = 1 | SyntaxError: assignment to None | >>> f.None | Traceback (most recent call last): | File "", line 1, in ? | AttributeError: 'Foo' object has no attribute 'None' | >>> setattr(f, 'None', 1) | > f.None | 1
I was a little surprised by this. ISTM that f.None should consistently work or not work both for getting and setting. The last result could be considered a bug rusulting from getting disabling depending on None not being set, but having a backdoor that does allow it to be set.
I recently read someone (Guido?) saying that a language should start 'strict' because it is much easier to allow something new than disallow something old. Allowing 'None' and possibly other keywords as attributes will not break code (that does not depend on the exceptions). But I presume there was some thought that the restriction might prevent buggy code.
At the global level, the subversion does not work:
globals()['None'] = 'ha' None dir() ['None', 'builtins', 'doc', 'name', 'package'] globals()['None'] 'ha'
tjr
- Previous message: [Python-Dev] Assignment to None
- Next message: [Python-Dev] Assignment to None
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]