我正在编写一个Python解析器来学习Flex和Bison,我试图找出为什么只有这些程序中的第一个是有效的Python.
a.py:
\
# This is valid Python
Run Code Online (Sandbox Code Playgroud)
没有产生错误.
b.py:
\
# This is not valid Python
Run Code Online (Sandbox Code Playgroud)
产生此错误:
File "b.py", line 1
\
^
IndentationError: unexpected indent
Run Code Online (Sandbox Code Playgroud)
并且c.py:
if True:
pass
\
# This is not valid Python
Run Code Online (Sandbox Code Playgroud)
产生此错误:
File "c.py", line 4
# This is not valid Python
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
我在linux2(Ubuntu 10.04)上使用Python 2.6.5(r265:79063,2010年4月16日,13:09:56)[GCC 4.4.3]; 但是,在ideone.com上进行测试表明Python 3上的行为是相同的.
这是一个实施细节。
以下是一些不同的实现如何响应您的代码:
a.py b.py c.py
---- ---- ----
CPython 2.6.5 ok bad bad
CPython 3.? ok bad bad
Jython 2.2.1 ok ok bad
Jython 2.5.2 bad bad bad
IronPython 2.7.1 ok bad ok
Run Code Online (Sandbox Code Playgroud)
我对 Python 语言参考的显式行连接部分的阅读是,所有三个示例都可以被视为有效:
两个或多个物理行可以使用反斜杠字符 ( ) 连接成逻辑行
\,如下所示:当物理行以不属于字符串文字或注释的反斜杠结尾时,它将与以下内容连接形成单个逻辑行,删除反斜杠和后面的行尾字符。
如果 CPython 被更改为接受所有三个示例都是有效的,我怀疑它的用户会注意到它,改变语言的字符,或者破坏任何代码。
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |