gpt4 book ai didi

python - python 版本 2.6 和 3.1 中出现奇怪的语法错误

转载 作者:太空狗 更新时间:2023-10-29 20:29:42 26 4
gpt4 key购买 nike

这可能不是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!' ) 后面,源代码也将在没有编译的情况下编译错误。

我也可以用 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 传送到远程客户端。

关于python - python 版本 2.6 和 3.1 中出现奇怪的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2976798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com