【发布时间】:2011-02-27 22:34:38
【问题描述】:
这可能不是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__' 子句的存在与否应该
不要在句法层面改变对酸的解释。
任何人都可以重现上述问题,和/或评论 现象?
干杯
【问题讨论】:
-
我能够重现它。奇怪 - 我也对答案感兴趣。
-
转载于 2.6.1。这对我来说似乎也是一个错误,但这是一个非常极端的情况。
-
您可以将“更新”作为答案并接受。
-
你可以称它为边缘案例,但它确实有能力成为一个展示停止者,直到激烈的头部抓挠和摸索让你继续你的日常工作;只要修复它是值得的。这里的问题是它是如此晦涩难懂,很难用谷歌搜索。
-
您找到了解决方案!对你有好处,但问题是“卡住”,没有答案。也许您可以将解决方案发布为您自己问题的答案,然后再接受? :)
标签: python python-3.x