繁体   English   中英

python,版本2.6和3.1中的奇怪语法错误

[英]strange syntax error in python, version 2.6 and 3.1

这可能不是一个惊天动地的python缺陷,但我仍然怀疑以下行为背后的基本原理:当我跑

source = """
print( 'helo' )
if __name__ == '__main__':
  print( 'yeah!' )

#"""

print( compile( source, '<whatever>', 'exec' ) )

我得到::

  File "<whatever>", line 6
    #
    ^
SyntaxError: invalid syntax

我可以通过(1)删除尾随#来避免这种异常; (2)删除或取消if __name__ == '__main__':\\n print( 'yeah!' )行; (3)在源的最后添加换行符。

而且,如果我的源端没有在print( 'yeah!' )后面的尾随换行符print( 'yeah!' ) ,源代码也会编译而不会出错。

我也可以用python 2.6重现这种行为,所以它对3k系列来说并不陌生。

我发现这个错误非常令人恼火,因为当我将上面的源放在文件中并直接执行它或导入它时,不会发生错误 - 这是预期的行为。

字符串文字外的# (哈希)应始终表示python源中(可能为空)注释的开头; 此外, if __name__ == '__main__'子句的存在与否不应该改变句法层面上的一个源的解释。

任何人都可以重现上述问题,和/或评论这种现象吗?

干杯

更新

事实证明这确实是一个错误,正如http://groups.google.com/group/comp.lang.python/msg/b4842cc7abd75fe9所指出的那样; 错误报告位于http://bugs.python.org/issue1184112 ; 它看起来固定在2.7和3.2。

一旦被识别,这个bug就非常容易修复:因为当一个新行被添加到源文本时,一个有效的python源应该在语法上保持有效和语义不变,只需机械地对任何源文本执行。 这让我想起了; 在汇编多文件javascript源时,您可以机械地在源文本之间插入分号,以便有效地将gzip压缩传送到远程客户端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM