FAQ
Python all versions.

It's not a bug, but I'm suprised the following does
not raise a SyntaxError (missing space between
'9' and 'for').
[9for c in 'abc']
[9, 9, 9]
>>>

Side effect: If this behaviour is considered as correct,
it makes a correct Python code styling (IDLE, editors, ...)
practically impossible to realise.

Search Discussions

  • Mark Dickinson at Jul 4, 2010 at 8:55 am

    On Jul 4, 9:31?am, jmfauth wrote:
    Python all versions.

    It's not a bug, but I'm suprised the following does
    not raise a SyntaxError (missing space between
    '9' and 'for').


    [9for c in 'abc']
    [9, 9, 9]

    Side effect: If this behaviour is considered as correct,
    it makes a correct Python code styling (IDLE, editors, ...)
    practically impossible to realise.
    Why? If Python itself has no problem parsing this code, why should it
    be so difficult for editors? Python's grammar is fairly simple: it's
    LL(1) (unlike C's, for example), so can be parsed with only 1 token of
    lookahead.

    --
    Mark
  • Mark Dickinson at Jul 4, 2010 at 9:02 am

    On Jul 4, 9:55?am, Mark Dickinson wrote:
    Why? ?If Python itself has no problem parsing this code, why should it
    be so difficult for editors? ?Python's grammar is fairly simple: ?it's
    LL(1) (unlike C's, for example), so can be parsed with only 1 token of
    lookahead.
    Bah. Ignore the bit about C. I was thinking that the dangling else
    issue made this a problem, but now I'm not sure that's true.

    --
    Mark
  • Carl Banks at Jul 4, 2010 at 10:35 am

    On Jul 4, 1:31?am, jmfauth wrote:
    Python all versions.

    It's not a bug, but I'm suprised the following does
    not raise a SyntaxError (missing space between
    '9' and 'for').
    [9for c in 'abc']
    [9, 9, 9]
    It does seem strange that Python's lexer wouldn't consider 9for as a
    single token. Even tough it's not a valid token in Python, your eye
    kind of sees it as one, so wouldn't it be better to raise a syntax
    error?

    Some other places were keyword can follow a number:

    9if 0 else 1 (but not "9if 0else 1")
    9and 0
    9or 0
    9in (1,2,3)
    9is None

    Side effect: If this behaviour is considered as correct,
    it makes a correct Python code styling (IDLE, editors, ...)
    practically impossible to realise.
    I'm not sure why an odd corner of the grammar would mess the whole
    thing up. Most code stylers only approximate the actual grammar
    anyway.


    Carl Banks
  • Jmfauth at Jul 4, 2010 at 1:49 pm

    On 4 juil, 12:35, Carl Banks wrote:
    On Jul 4, 1:31?am, jmfauth wrote:

    Thanks for having explained in good English my feelings.

    Some other places were keyword can follow a number:
    Note, that this does not envolve numbers only.
    ['z' for c in 'abc']
    ['z', 'z', 'z']
    'z'if True else 'a'
    z
    >>>


    Side effect: If this behaviour is considered as correct,
    it makes a correct Python code styling (IDLE, editors, ...)
    practically impossible to realise.
    I'm not sure why an odd corner of the grammar would mess the whole
    thing up. ?Most code stylers only approximate the actual grammar
    anyway.
    I guess, most editors (so do I) are mainly using
    a "re" engine for their styling.

    ---

    Not a keyword, but space related, what should I thing
    about this?
    print9
    Traceback (most recent call last):
    File "<psi last command>", line 1, in <module>
    NameError: name 'print9' is not defined
    print+9
    9
    print'abc'
    abc
    print9.0
    File "<psi last command>", line 1
    print9.0
    ^
    SyntaxError: invalid syntax
    >>>

    Regards,
    jmf
  • Thomas Jollans at Jul 4, 2010 at 3:08 pm

    On 07/04/2010 03:49 PM, jmfauth wrote:
    On 4 juil, 12:35, Carl Banks wrote:
    On Jul 4, 1:31 am, jmfauth wrote:

    Thanks for having explained in good English my feelings.

    Some other places were keyword can follow a number:
    Note, that this does not envolve numbers only.
    ['z' for c in 'abc']
    ['z', 'z', 'z']
    'z'if True else 'a'
    z
    Side effect: If this behaviour is considered as correct,
    it makes a correct Python code styling (IDLE, editors, ...)
    practically impossible to realise.
    I'm not sure why an odd corner of the grammar would mess the whole
    thing up. Most code stylers only approximate the actual grammar
    anyway.
    I guess, most editors (so do I) are mainly using
    a "re" engine for their styling.

    ---

    Not a keyword, but space related, what should I thing
    about this?
    print9
    looks like an identifier
    Traceback (most recent call last):
    File "<psi last command>", line 1, in <module>
    NameError: name 'print9' is not defined
    print+9
    can't be a single identifier. Maybe it's a print statement followed by
    stuff? (stop being a statement, print!)
    9
    print'abc'
    can't be an identifier or string literal. Maybe it's a print statement
    followed by stuff?
    abc
    print9.0
    looks like getattr(print9, '0') - but '0' is not a valid name.
    Impossible. Error!
    File "<psi last command>", line 1
    print9.0
    ^
    SyntaxError: invalid syntax
    somewhat strange, yes.
  • John Machin at Jul 4, 2010 at 10:02 pm

    On Jul 5, 1:08?am, Thomas Jollans wrote:
    On 07/04/2010 03:49 PM, jmfauth wrote:
    ? File "<psi last command>", line 1
    ? ? print9.0
    ? ? ? ? ? ?^
    SyntaxError: invalid syntax
    somewhat strange, yes.
    There are two tokens, "print9" (a name) and ".0" (a float constant) --
    looks like SyntaxError to me.
  • Mark Dickinson at Jul 5, 2010 at 7:44 am

    On Jul 4, 11:02?pm, John Machin wrote:
    On Jul 5, 1:08?am, Thomas Jollans wrote:
    On 07/04/2010 03:49 PM, jmfauth wrote:
    ? File "<psi last command>", line 1
    ? ? print9.0
    ? ? ? ? ? ?^
    SyntaxError: invalid syntax
    somewhat strange, yes.
    There are two tokens, "print9" (a name) and ".0" (a float constant) --
    looks like SyntaxError to me.
    Yep. Looks that way to me, too.

    Python 2.7.0+ (release27-maint:82569, Jul 5 2010, 08:35:08)
    [GCC 4.0.1 (Apple Inc. build 5490)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    from cStringIO import StringIO
    import tokenize, token
    for tok in tokenize.generate_tokens(StringIO("print9.0").readline):
    ... print token.tok_name[tok[0]], tok[1]
    ...
    NAME print9
    NUMBER .0
    ENDMARKER

    --
    Mark
  • Jmfauth at Jul 5, 2010 at 6:12 pm
    Thank you all for the discussion and the explanations.
    Mark Dickinson
    I toyed a littled bit this afternoon and I wrote a colouriser
    (British spelling?) with the tokenize module. It is quite
    simple and easy.

    BTW, if I understand correctly the module tokenize import
    the module token. So your example becomes:
    from cStringIO import StringIO
    import tokenize
    for tok in tokenize.generate_tokens(StringIO("print9.0").readline):
    print tokenize.tok_name[tok[0]], tok[1]

    NAME print9
    NUMBER .0
    ENDMARKER
    >>>
  • Mark Dickinson at Jul 5, 2010 at 7:56 pm

    On Jul 5, 7:12?pm, jmfauth wrote:
    BTW, if I understand correctly the module tokenize import
    the module token. So your example becomes:
    from cStringIO import StringIO
    import tokenize
    for tok in tokenize.generate_tokens(StringIO("print9.0").readline):
    ? ? ? ? print tokenize.tok_name[tok[0]], tok[1]
    Ah yes; you're right. Thanks!

    Mark

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppython-list @
categoriespython
postedJul 4, '10 at 8:31a
activeJul 5, '10 at 7:56p
posts10
users5
websitepython.org

People

Translate

site design / logo © 2023 Grokbase