This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2011年12月16日 07:27 by Jean-Michel.Fauth, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Messages (11) | |||
|---|---|---|---|
| msg149596 - (view) | Author: Jean-Michel Fauth (Jean-Michel.Fauth) | Date: 2011年12月16日 07:27 | |
Can this be fixed? As far as I can remember (ver. 1.5.6), it has always existed. Python does not crash, I find it inelegant. Should it not be a SyntaxError? Side effect. Searching for keywords, (eg. with re, "\b") may practically always implies to handle this case separately. Python all versions. >>> 1and 0 0 >>> 1or 0 1 >>> 9if True else 22 9 >>> 0.1234if True else 22 0.1234 >>> [999for i in range(3)] [999, 999, 999] |
|||
| msg149608 - (view) | Author: Charles-François Natali (neologix) * (Python committer) | Date: 2011年12月16日 10:21 | |
> Can this be fixed?
More or less.
The following patch does the trick, but is not really elegant:
"""
--- a/Parser/tokenizer.c 2011年06月01日 02:39:38.000000000 +0000
+++ b/Parser/tokenizer.c 2011年12月16日 08:48:45.000000000 +0000
@@ -1574,6 +1576,10 @@
}
}
tok_backup(tok, c);
+ if (is_potential_identifier_start(c)) {
+ tok->done = E_TOKEN;
+ return ERRORTOKEN;
+ }
*p_start = tok->start;
*p_end = tok->cur;
return NUMBER;
"""
"""
> python -c "1and 0"
File "<string>", line 1
1and 0
^
SyntaxError: invalid token
"""
Note that there are other - although less bothering - limitations:
"""
> python -c "1 and@ 2"
File "<string>", line 1
1 and@ 2
^
SyntaxError: invalid syntax
"""
This should be catched by the lexer, not the parser (i.e. it should raise an "Invalid token" error).
That's a limitation of the ad-hoc scanner.
|
|||
| msg149625 - (view) | Author: Mark Dickinson (mark.dickinson) * (Python committer) | Date: 2011年12月16日 14:38 | |
> Can this be fixed? Not without breaking backwards compatibility, I would think. |
|||
| msg149626 - (view) | Author: Benjamin Peterson (benjamin.peterson) * (Python committer) | Date: 2011年12月16日 14:53 | |
I think it's fairly harmless. Perhaps Python 4. |
|||
| msg149651 - (view) | Author: Terry J. Reedy (terry.reedy) * (Python committer) | Date: 2011年12月17日 01:19 | |
The proposal is to change the definition of numbers literals from X to one that is context-sensitive: X followed by whitespace or a syntactic symbol but not anything else, in particular, not by an identifier_start character. I am +-0 at the moment. > 1 and@ 2 I presume this is parsed as 1 and @ 2, which is a syntax error. |
|||
| msg149672 - (view) | Author: Georg Brandl (georg.brandl) * (Python committer) | Date: 2011年12月17日 15:49 | |
I don't see a good reason to change this. |
|||
| msg149677 - (view) | Author: Jean-Michel Fauth (Jean-Michel.Fauth) | Date: 2011年12月17日 16:53 | |
I have done a little bit hd/files archeology and
found some of my comments.
Pointing on number litterals is probably wrong. The fact
is that, this happens with practically any expression. And
strangely, not all keywords (constructs?) are affected.
>>> 999if 1 else 888
999
>>> """"""if 1 else 888
>>> {1: 'a'}if 1 else 888
{1: 'a'}
>>> 999 if 'a' else 888
999
>>> 999if 'a' else 888
999
>>> 999if 'a'else 888
999
>>> 999if 888else 888
File "<eta last command>", line 1
999if 888else 888
^
SyntaxError: invalid token
>>> 999if """"""else 888
888
To summarize: The Python syntax does not require an "isolated"
keyword, something like \b<keyword>\b.
|
|||
| msg149680 - (view) | Author: Ezio Melotti (ezio.melotti) * (Python committer) | Date: 2011年12月17日 17:21 | |
>>> 999if 888else 888 File "<eta last command>", line 1 999if 888else 888 ^ SyntaxError: invalid token This might be because 888e5 is a valid expression, so the 'e' is parsed as part of the number rather than a separate token. >>> 999 if 888.else 888 File "<stdin>", line 1 999 if 888.else 888 ^ SyntaxError: invalid token >>> 999 if 888jelse 888 999 |
|||
| msg149700 - (view) | Author: Raymond Hettinger (rhettinger) * (Python committer) | Date: 2011年12月17日 19:53 | |
-1 I'm with Mark, Georg, and Benjamin on this one. |
|||
| msg149701 - (view) | Author: Jean-Michel Fauth (Jean-Michel.Fauth) | Date: 2011年12月17日 20:07 | |
> Ezio Melotti Good catch. I'm not complaining. I just find funny to see the number of editors not "colorizing" this kind of Python valid expressions. (IDLE included) For me, subject close. |
|||
| msg149704 - (view) | Author: Ezio Melotti (ezio.melotti) * (Python committer) | Date: 2011年12月17日 21:15 | |
I'll close this then. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:24 | admin | set | github: 57819 |
| 2016年05月02日 20:29:37 | rutsky | set | nosy:
+ rutsky |
| 2016年05月02日 17:12:25 | berker.peksag | link | issue26908 superseder |
| 2011年12月17日 21:15:56 | ezio.melotti | set | status: open -> closed resolution: wont fix messages: + msg149704 stage: resolved |
| 2011年12月17日 20:07:44 | Jean-Michel.Fauth | set | messages: + msg149701 |
| 2011年12月17日 19:53:43 | rhettinger | set | nosy:
+ rhettinger messages: + msg149700 |
| 2011年12月17日 17:21:26 | ezio.melotti | set | nosy:
+ ezio.melotti messages: + msg149680 |
| 2011年12月17日 16:55:15 | pitrou | set | nosy:
+ gvanrossum versions: + Python 3.3, - Python 3.4 |
| 2011年12月17日 16:53:51 | Jean-Michel.Fauth | set | messages: + msg149677 |
| 2011年12月17日 15:49:19 | georg.brandl | set | nosy:
+ georg.brandl messages: + msg149672 |
| 2011年12月17日 01:19:46 | terry.reedy | set | versions:
+ Python 3.4, - Python 2.7 nosy: + terry.reedy messages: + msg149651 type: enhancement |
| 2011年12月16日 17:45:07 | jcea | set | nosy:
+ jcea |
| 2011年12月16日 14:53:44 | benjamin.peterson | set | priority: normal -> low messages: + msg149626 |
| 2011年12月16日 14:38:43 | mark.dickinson | set | nosy:
+ mark.dickinson messages: + msg149625 |
| 2011年12月16日 10:21:38 | neologix | set | nosy:
+ neologix messages: + msg149608 |
| 2011年12月16日 07:31:52 | pitrou | set | nosy:
+ benjamin.peterson |
| 2011年12月16日 07:27:20 | Jean-Michel.Fauth | create | |