[Python-ideas] Make keywords KEYwords only in places they would have syntactical meaning

Steven D'Aprano steve at pearwood.info
Fri May 18 07:59:46 EDT 2018

On Fri, May 18, 2018 at 07:22:13PM +0800, Ken Hilton wrote:

> Only treat keywords as having any special meaning when they are in places
> with syntactical significance.
> My idea is to only treat keywords as having special meaning when they're in
> the right place.

Chris discussed his experience with REXX, which works like that:

    The problem is that you can go a long way down the road of 
    using a particular name, only to find that suddenly you can't
    use it in some particular context. [...]
    So the question is: Is it better to be able to use a keyword
    as an identifier for a while, and then run into trouble later,
    or would you prefer to be told straight away "no, sorry, pick
    a different name"?


I think its a no-brainer: I'd much rather get an error earlier, when I 
first decide its a good idea to call a method "while", rather than six 
months later when I stumble across a corner case that stops me from 
using it.

I'm sure that everyone is absolutely champing at the bit to write code 

    for = if if while else else
    or = [in or for for in in for if if]

*wink* but I think we should be conservative about allowing keywords as 
identifiers. Requiring a clear and obvious escaping mechanism (verbatim 
strings \name) or a clear and obvious renaming convension (name_) is 
better than a context-sensitive grammar.

That's even assuming such a context-sensitive grammar would be possible 
within the requirement that Python's parser is LL(1).


More information about the Python-ideas mailing list