在Python 2.6和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!' )
后面没有加空行,代码也能正常运行,没有错误。
我在Python 2.6中也能复现这个问题,所以这并不是3k系列的新问题。
我觉得这个错误非常烦人,尤其是当我把上面的代码放在一个文件里直接执行或者导入时,根本不会出现错误——这才是我期待的结果。
在Python代码中,#
(井号)应该总是表示一个(可能是空的)注释的开始;而且,是否有if __name__ == '__main__'
这一句不应该改变代码的语法解析。
有没有人能复现这个问题,或者对这个现象发表一些看法?
谢谢!